【问题标题】:How to check if a word is more common in its plural form rather than in it's singular form in an array of words (with Python/NLTK)?如何检查一个单词是否以复数形式而不是单数形式在单词数组中更常见(使用 Python/NLTK)?
【发布时间】:2015-05-05 07:23:23
【问题描述】:

我正在尝试做 NLTK 练习,但我做不到这个。 “哪些名词以复数形式而不是单数形式更常见?(仅考虑以 -s 后缀构成的常规复数形式。)”。我花了一天时间思考这个问题并尝试了一些事情,但我就是无法理解。 谢谢。

【问题讨论】:

  • 你试过了吗?第一步当然是标记文本。
  • 我拿走了棕色语料库。所有的话。它们被标记和标记。我只取了名词,没有标签或任何东西。

标签: python nltk


【解决方案1】:

取一个语料库,做个计数_:

>>> 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 中被标记和标记,但如果你想使用自己的语料库,那么你必须考虑以下几点:

  • 使用哪个语料库?如何代币化?如何 POS-tag?
  • 你在数什么?类型或令牌?
  • 如何处理 POS 歧义?如何区分名词和非名词?

最后,考虑一下:

  • 真的有办法确定复数还是单数在语言中更常见吗?还是总是与您选择分析的语料库相关?
  • 是否存在某些名词不存在复数或单数的情况? (很可能答案是肯定的)。

【讨论】:

  • 是的。我会使用棕色语料库。你用单个单词手动执行此操作。但是,例如,通常如何处理所有棕色语料库单词?以自动方式。
  • 我可以用循环来完成。但是,有没有什么特殊而神奇的 NLTK 函数可以做到这一点?
  • 所以我需要一个循环来检查每个单词是否有相同的单词以 s 或其他东西结尾。正确的。我会尝试并添加到此作为回应。谢谢。
【解决方案2】:

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(),它们将不会重复。是这样吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-17
    • 1970-01-01
    相关资源
    最近更新 更多