计算混合语言文档中的单词

时间:2013-11-26 10:59:32

标签: utf-8 multilingual cjk word-count

给定一组包含中文字符,基于拉丁字母的单词或两者混合的单词,我想获得单词count。

即便:

this is just an example
这只是个例子

理想情况下应该给出10个单词;但是,当然,如果没有字典,例子最好被视为两个独立的字符。因此,这里也可以接受11个单词/字符的计数。

显然,wc -w不起作用。它将6个汉字/ 5个单词视为1个“单词”,并返回总共6个单词。

我该怎么办?我愿意尝试不同的语言,尽管bash和python现在对我来说是最快的。

2 个答案:

答案 0 :(得分:3)

您应该在Unicode word boundaries上拆分文本,然后计算包含字母或表意符号的元素。如果您正在使用Python,则可以使用unisegnltk包。另一种方法是简单地使用Unicode-aware regexes,但这些只会在simple word boundaries上中断。另请参阅问题Split unicode string on word boundaries

请注意,对于某些语言,您需要更复杂的基于字典的解决方案。 UAX#29声明:

  

对于Thai,Lao,Khmer,Myanmar和其他通常不在单词之间使用空格的脚本,一个好的实现不应该依赖于默认的单词边界规范。它应该使用更复杂的机制,这也是断线所必需的。日语和中文等表意文字剧本更为复杂。如果韩文文本没有空格,则同样适用。但是,由于缺乏更复杂的机制,本附件中规定的规则提供了明确的默认值。

答案 1 :(得分:0)

我想到了一个快速的黑客,因为中文字符在UTF8中是3个字节长:

(伪代码)

for each character:
    if character (byte) begins with 1:
        add 1 to total chinese chars
    if it is a space:
        add 1 to total "normal" words
    if it is a newline:
        break

然后取total chinese chars / 3 + total words得到每一行的总和。这将对混合语言的情况给出错误的计数,但应该是一个良好的开端。

这是test

但是,上面的句子总共会给出2个(每个汉字1个)。需要两种语言之间的空格才能给出正确的计数。