我写一个简单的中文分词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> 这个实现有一些限制:
词典较小,可能无法覆盖所有常用词。没有考虑词性和上下文,可能会出现歧义。不支持新词识别。要提高分词质量,你可以:
扩展词典,增加更多常用词。实现更复杂的算法,如基于统计的分词方法。添加自定义规则来处理特殊情况。网友回复


