NLTK书中有几个字数示例,但实际上它们不是字数而是 token 数。例如,第1章“计数词汇”说以下内容给出了单词计数:
text = nltk.Text(tokens)
len(text)
但是,它没有-它提供了单词和标点计数。
如何获得真实的字数(忽略标点符号)?
同样,如何获得一个单词的平均字符数?
显而易见的答案是:
word_average_length =(len(string_of_text)/len(text))
但是,这将因为以下原因而关闭:
我在这里想念什么吗?这必须是非常常见的NLP任务...
最佳答案
删除标点符号
使用正则表达式过滤掉标点符号
import re
from collections import Counter
>>> text = ['this', 'is', 'a', 'sentence', '.']
>>> nonPunct = re.compile('.*[A-Za-z0-9].*') # must contain a letter or digit
>>> filtered = [w for w in text if nonPunct.match(w)]
>>> counts = Counter(filtered)
>>> counts
Counter({'this': 1, 'a': 1, 'is': 1, 'sentence': 1})
平均字符数
对每个单词的长度求和。除以字数。
>>> float(sum(map(len, filtered))) / len(filtered)
3.75
或者,您可以利用已经进行的计数来防止重新计算。这会将单词的长度乘以我们看到它的次数,然后将所有结果相加。
>>> float(sum(len(w)*c for w,c in counts.iteritems())) / len(filtered)
3.75
关于python - NLTK中的实际字数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10677020/