我正在尝试写一个方法,当内容是中文和日文时,可以计算单词的数量。这应该排除特殊字符/标点符号/空格。
我试着为每个地区创建一个正则表达式,并根据它找到单词。试图在互联网上寻找现有的正则表达式,但似乎没有一个是工作。我的方法-
function countWords(text, locale) {
let wordCount = 0;
// Set the word boundary based on the locale
let wordBoundary = '\\b';
if (locale === 'ja') {
// Japanese word boundary
wordBoundary = '[\\p{Script=Hiragana}\\p{Script=Katakana}\\p{Script=Han}ー]+';
} else if (locale === 'zh') {
// Chinese word boundary
wordBoundary = '[\\p{Script=Han}]+';
}
const regex = new RegExp(wordBoundary, 'gu');
const matches = text.matchAll(regex);
for (const match of matches) {
wordCount++;
}
return wordCount;
}
我认为这应该工作,但我比较的字数在微软的字和使用这种逻辑,他们来不同
2条答案
按热度按时间voase2hg1#
我用Python做了类似的事情。
您可以使用现有的语言处理库,而不是完全依赖于正则表达式,这些库提供了专为中文和日语设计的更好的分词算法。这里有几个你可以考虑的流行库:
1.日本人:MeCab()是一个流行的日语词法分析器和词性标注器。它可以有效地将日语文本分割成单词。与Jieba类似,您可以尝试使用Emscripten或WebAssembly等工具在JavaScript代码中使用MeCab。
下面是一个示例,说明如何修改代码以使用Jieba库进行中文分词:
请注意,将Jieba或MeCab集成到JavaScript中可能需要额外的设置步骤,例如编译Web库或使用专门为JavaScript环境构建的预编译版本。
c8ib6hqw2#
一种可能的单词计数方法可以基于文本分割数组,该数组是调用
Intl.Segmenter
示例的segment
方法的结果。每个分段的项目具有诸如以下的属性:...
...因此,为了获得总字数,可以通过验证项目的
isWordLike
值来reduce
文本段项目数组...备注…到目前为止,Firefox仍然不支持/实现
Intl.Segmenter