为什么wc -w和Python的len(text.split())给出不同的结果?

时间:2019-03-07 18:40:38

标签: python split tokenize wc

在哪种情况下,Unix命令行实用程序'wc'和Python的len(text.split())会给出不同的结果?

有些上下文,尽管它不相关,因为我们在这里要做的唯一事情是计算单词/标记(即,用空格分隔的字符集)。我正在使用IWSLT 2014语料库的德语文件,并且已经使用此script对它们进行了标记(即标点符号应该已经被标记等)。对于测试和验证集,wc和Python给出相同数量的单词(分别为125754个单词和140433个单词)。对于训练集,他们没有。使用Python 3,我得到以下结果:

python3 $ text = open('train.de','r').read()
python3 $ len(text.split())
3100720

使用wc实用程序时:

$ wc -w train.de 
3100699 train.de

请注意,差异非常细微,但足以引起问题。大约310万个单词的文本中只有21个单词的差异。

可能会发生什么?我已经检查了两个文档,并且两个功能应该等效。

谢谢。

编辑:有关我的本地环境的其他信息。具有区域设置的Ubuntu 16.04提供以下输出:

LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC=es_ES.UTF-8
LC_TIME=es_ES.UTF-8
LC_COLLATE="en_US.UTF-8"
LC_MONETARY=es_ES.UTF-8
LC_MESSAGES="en_US.UTF-8"
LC_PAPER=es_ES.UTF-8
LC_NAME=es_ES.UTF-8
LC_ADDRESS=es_ES.UTF-8
LC_TELEPHONE=es_ES.UTF-8
LC_MEASUREMENT=es_ES.UTF-8
LC_IDENTIFICATION=es_ES.UTF-8
LC_ALL=

1 个答案:

答案 0 :(得分:0)

不确定是否是您的情况,但这可能对某人有用。在装有 python 3.6 的系统上,split()不间断空间\xa0)上分割,而wc -w却没有。 >