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

标签 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=

最佳答案

不确定这是否是您的情况,但它可能对某人有用。在我的系统上使用 python 3.6 split() split 于 不间断空间 ( \xa0 ),而 wc -w才不是。

关于python - 为什么 wc -w 和 Python 的 len(text.split()) 给出不同的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55050711/

相关文章:

python - 同时执行多个功能

c++ - 如何将任意长度的句子拆分为单词并将其存储到变量中

vba - 拆分具有多行文本和单行文本的行

python - 标记文本以在 Python 中进行搜索

python - pycharm 变量 Pane 中的隐藏值

python - 十进制模块中的有效数字

c - 如何从用户那里获取数字和字符?

python - NLTK 单词与 word_tokenize

python - 在 python 中重新格式化字符串

linux - 从文本文件中分割记录 block