Почему wc -w и Python's len (text.split ()) дают разные результаты? - PullRequest
1 голос
/ 07 марта 2019

При каких обстоятельствах утилита командной строки Unix 'wc' и переменная len (text.split ()) в Python дают другой результат?

Немного контекста, хотя это не должно относиться к делу, посколькуединственное, что мы здесь делаем, это подсчет слов / жетонов (то есть наборов символов, разделенных пробелами).Я работаю с немецкими файлами корпуса IWSLT 2014 и уже разложил их с помощью этого сценария (т. Е. Знаки препинания должны быть уже размечены и т. Д.).Для набора тестов и валидации 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

Обратите внимание, что разница очень тонкая, но достаточная, чтобы быть проблематичной.Разница всего в 21 слове в тексте из 3,1 миллиона слов.

Что может произойти?Я уже проверил обе документации, и обе функции должны быть эквивалентны.

Заранее спасибо.

РЕДАКТИРОВАТЬ : дополнительная информация о моей локальной среде.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=
...