【发布时间】:2015-05-05 07:23:23
【问题描述】:
我正在尝试做 NLTK 练习,但我做不到这个。 “哪些名词以复数形式而不是单数形式更常见?(仅考虑以 -s 后缀构成的常规复数形式。)”。我花了一天时间思考这个问题并尝试了一些事情,但我就是无法理解。 谢谢。
【问题讨论】:
-
你试过了吗?第一步当然是标记文本。
-
我拿走了棕色语料库。所有的话。它们被标记和标记。我只取了名词,没有标签或任何东西。
我正在尝试做 NLTK 练习,但我做不到这个。 “哪些名词以复数形式而不是单数形式更常见?(仅考虑以 -s 后缀构成的常规复数形式。)”。我花了一天时间思考这个问题并尝试了一些事情,但我就是无法理解。 谢谢。
【问题讨论】:
取一个语料库,做个计数_:
>>> from collections import Counter
>>> from nltk.corpus import brown
>>> texts = brown.words()[:10000]
>>> word_counts = Counter(texts)
>>> word_counts['dollar']
5
>>> word_counts['dollars']
15
但请注意,有时在计数时仅使用表面字符串会不清楚,例如
>>> texts = brown.words()[:10000]
>>> word_counts = Counter(texts)
>>> word_counts['hits']
14
>>> word_counts['hit']
34
>>> word_counts['needs']
14
>>> word_counts['need']
30
POS 敏感计数(参见类型与令牌):
>>> texts = brown.tagged_words()[:10000]
>>> word_counts = Counter(texts)
>>> word_counts[('need', 'NN')]
6
>>> word_counts[('needs', 'NNS')]
3
>>> word_counts[('hit', 'NN')]
0
>>> word_counts[('hits', 'NNS')]
0
让我们进行一些逆向工程,brown 语料库很好,它在 NLTK 中被标记和标记,但如果你想使用自己的语料库,那么你必须考虑以下几点:
最后,考虑一下:
【讨论】:
brw 是一个单词数组。
counter = Counter(brw);
plurals = [];
for word in brw:
if(word[-1]!='s'):
plural = counter[word+'s'];
singul = counter[word];
if(plural>singul):
plurals.append(word+'s');
plurals 是输出数组,只有复数形式(重复,meh)。如果我使用 set(),它们将不会重复。是这样吗?
【讨论】: