我写一个简单的中文分词js代码,可以根据这个来丰富和扩展。
以下是代码实现:
// 简单的中文分词函数 function chineseSegmentation(text) { // 简单的词典,可以根据需要扩展 const dictionary = [ "我", "你", "他", "她", "它", "们", "是", "在", "有", "和", "的", "了", "不", "这", "那", "都", "很", "到", "中国", "北京", "上海", "广州", "深圳", "学习", "工作", "生活", "喜欢", "朋友" ]; let result = []; let i = 0; while (i < text.length) { let matched = false; // 尝试匹配最长的词 for (let j = Math.min(text.length, i + 4); j > i; j--) { const word = text.substring(i, j); if (dictionary.includes(word)) { result.push(word); i = j; matched = true; break; } } // 如果没有匹配到词,则将单个字符作为词 if (!matched) { result.push(text[i]); i++; } } return result; } // 使用示例 const text = "我在北京学习工作"; const segments = chineseSegmentation(text); console.log(segments.join(' | '));
这个函数的工作原理如下:
我们定义了一个简单的词典,包含一些常用词。函数从左到右遍历输入的文本。对于每个位置,它尝试匹配最长的词(最多4个字符)。如果找到匹配的词,将其添加到结果中,并移动到词的末尾继续处理。如果没有找到匹配的词,就将单个字符作为一个词。最后返回分词结果数组。在UniApp中使用这个函数,你可以将它放在一个独立的JS文件中(例如 segmentation.js),然后在需要的地方导入并使用:
// 在 pages/index/index.vue 文件中 <script> import { chineseSegmentation } from '../../utils/segmentation.js' export default { data() { return { inputText: '', segmentedText: '' } }, methods: { performSegmentation() { const segments = chineseSegmentation(this.inputText); this.segmentedText = segments.join(' | '); } } } </script> <template> <view> <input v-model="inputText" placeholder="输入中文文本" /> <button @click="performSegmentation">分词</button> <text>分词结果: {{ segmentedText }}</text> </view> </template>
这个实现有一些限制:
词典较小,可能无法覆盖所有常用词。没有考虑词性和上下文,可能会出现歧义。不支持新词识别。要提高分词质量,你可以:
扩展词典,增加更多常用词。实现更复杂的算法,如基于统计的分词方法。添加自定义规则来处理特殊情况。网友回复