Как проверить, находится ли слово в единственной форме или нет в python? - программирование
Подтвердить что ты не робот

Как проверить, находится ли слово в единственной форме или нет в python?

Я пытаюсь получить, является ли слово в единственной форме или во множественном числе, используя nltk pos_tag. Но результаты неточны.

Итак, мне нужен способ найти, как можно получить слово в единственной форме или во множественном числе? кроме того, мне это нужно без использования пакета python.

4b9b3361

Ответ 1

Для английского слова каждое слово должно каким-то образом иметь корневую лемму, где множество по умолчанию является единственным.

Предполагая, что у вас есть только существительные в вашем списке, вы можете попробовать следующее:

from nltk.stem import WordNetLemmatizer

wnl = WordNetLemmatizer()

def isplural(word):
    lemma = wnl.lemmatize(word, 'n')
    plural = True if word is not lemma else False
    return plural, lemma

nounls = ['geese', 'mice', 'bars', 'foos', 'foo', 
                'families', 'family', 'dog', 'dogs']

for nn in nounls:
    isp, lemma = isplural(nn)
    print nn, lemma, isp

У вас будет проблема, когда слово выходит из wordnet, тогда вам нужно использовать более изощренный классификатор или машины с конечным состоянием из NLTK.

Ответ 2

Предполагая, что вам требуется английское решение, вы можете сделать что-то похожее на решение 2er0 немного больше с помощью pattern-en:

from pattern.en import singularize

def isplural(pluralForm):
     singularForm = singularize(pluralForm)
     plural = True if pluralForm is not singularForm else False
     return plural, singularForm

nounls = ['geese', 'mice', 'bars', 'foos', 'foo', 
            'families', 'family', 'dog', 'dogs']

for pluralForm in nounls:
    isp, singularForm = isplural(pluralForm)
    print pluralForm, singularForm, isp

который выводит

geese goose True
mice mouse True
bars bar True
foos foo True
foo foo False
families family True
family family False
dog dog False
dogs dog True

единственное различие в выходе между решением 2er0, и это

foos foo True

так как его решение выводит False, как он отметил, поскольку foos не находится в wordnet (а не вообще английском).

Ответ 3

привет, у меня есть некоторые проблемы с моей собственной программой. Нужно сравнить два списка: один список с единичными словами, а другой - с множественными словами, и я хочу объединить оба примера. l1 = [существительное} l2 = существительные} нужно получить существительные в результирующий список, кажется, очень легко не