Попытка с этим предложением:
text = "We like the cake you did this week, we didn't like the cakes you cooked last week"
Считать напрямую без токенов nltk:
Counter(text.split())
Возвращает:
Counter({'We': 1,
'cake': 1,
'cakes': 1,
'cooked': 1,
'did': 1,
"didn't": 1,
'last': 1,
'like': 2,
'the': 2,
'this': 1,
'we': 1,
'week': 1,
'week,': 1,
'you': 2})
Мы видим, что мы не счастливыс результатом.делали и не делали (что является сокращением не) считаются разными словами, поэтому были «неделя» и «неделя»
Это исправлено, когда вы токенизируете с использованием nltk (расщепление на самом деле однонаивный способ токенизации):
Counter(nltk.word_tokenize(text))
Возвращает
Counter({',': 1,
'We': 1,
'cake': 1,
'cakes': 1,
'cooked': 1,
'did': 2,
'last': 1,
'like': 2,
"n't": 1,
'the': 2,
'this': 1,
'we': 1,
'week': 2,
'you': 2})
Если вы хотите считать одним и тем же словом «торт» и «пирожные», вы также можете лемматизировать:
Counter([lemmatizer.lemmatize(w).lower() for w in nltk.word_tokenize(text)])
Возвращает
Counter({',': 1,
'cake': 2,
'cooked': 1,
'did': 2,
'last': 1,
'like': 2,
"n't": 1,
'the': 2,
'this': 1,
'we': 2,
'week': 2,
'you': 2})