Почему NLTK Lemmatizer не может лемматизировать некоторые слова во множественном числе?

Я пытался лемматизировать слова из Священной Книги Корана, но некоторые слова не могут быть лемматизированы.

вот моя фраза:

sentence = "Then bring ten surahs like it that have been invented and call upon for assistance whomever you can besides Allah if you should be truthful"

это предложение является частью моего набора данных txt. как видите, есть «суры», которые являются формой множественного числа от «суры». Я пробовал свои коды:

def lemmatize(self, ayat):
    wordnet_lemmatizer = WordNetLemmatizer()
    result = []

    for i in xrange (len(ayat)):
        result.append(wordnet_lemmatizer.lemmatize(sentence[i],'v'))
    return result

который, когда я запускаю и печатаю, результат такой:

['bring', 'ten', 'surahs', 'like', u'invent', 'call', 'upon', 'assistance', 'whomever', 'besides', 'Allah', 'truthful']

«суры» не превращаются в «суры».

кто-нибудь может сказать, почему? Благодарю.


person sang    schedule 05.06.2017    source источник
comment
Нет ничего плохого в wordnetlemmatizer как таковом, но он просто не может достаточно хорошо обрабатывать неправильные слова. Вы можете попробовать этот «взлом» - stackoverflow.com/questions/22333392/   -  person SUBHAM MAJAVADIYA    schedule 05.06.2017
comment
Я пробовал этот хак, но он ничего не возвращает []   -  person sang    schedule 05.06.2017


Ответы (1)


Видеть

Для большинства нестандартных английских слов WordNet Lemmatizer не сильно поможет в получении правильной леммы, попробуйте стеммер:

>>> from nltk.stem import PorterStemmer
>>> porter = PorterStemmer()
>>> porter.stem('surahs')
u'surah'

Кроме того, попробуйте lemmatize_sent в earthy (обертка nltk, "бесстыдная заглушка"):

>>> from earthy.nltk_wrappers import lemmatize_sent
>>> sentence = "Then bring ten surahs like it that have been invented and call upon for assistance whomever you can besides Allah if you should be truthful"
>>> lemmatize_sent(sentence)
[('Then', 'Then', 'RB'), ('bring', 'bring', 'VBG'), ('ten', 'ten', 'RP'), ('surahs', 'surahs', 'NNS'), ('like', 'like', 'IN'), ('it', 'it', 'PRP'), ('that', 'that', 'WDT'), ('have', 'have', 'VBP'), ('been', u'be', 'VBN'), ('invented', u'invent', 'VBN'), ('and', 'and', 'CC'), ('call', 'call', 'VB'), ('upon', 'upon', 'NN'), ('for', 'for', 'IN'), ('assistance', 'assistance', 'NN'), ('whomever', 'whomever', 'NN'), ('you', 'you', 'PRP'), ('can', 'can', 'MD'), ('besides', 'besides', 'VB'), ('Allah', 'Allah', 'NNP'), ('if', 'if', 'IN'), ('you', 'you', 'PRP'), ('should', 'should', 'MD'), ('be', 'be', 'VB'), ('truthful', 'truthful', 'JJ')]

>>> words, lemmas, tags = zip(*lemmatize_sent(sentence))
>>> lemmas
('Then', 'bring', 'ten', 'surahs', 'like', 'it', 'that', 'have', u'be', u'invent', 'and', 'call', 'upon', 'for', 'assistance', 'whomever', 'you', 'can', 'besides', 'Allah', 'if', 'you', 'should', 'be', 'truthful')

>>> from earthy.nltk_wrappers import pywsd_lemmatize
>>> pywsd_lemmatize('surahs')
'surahs'

>>> from earthy.nltk_wrappers import porter_stem
>>> porter_stem('surahs')
u'surah'
person alvas    schedule 05.06.2017
comment
Вау, спасибо. это здорово. но что такое земной модуль и где я могу его получить? Земляным назвать не могу, имя модуля не определено. - person sang; 05.06.2017
comment
вау круто спасибо, установил. есть ли книги или учебник для земной библиотеки? - person sang; 06.06.2017
comment
github.com/alvations/earthy/blob/master/FAQ.md но если вам нужен более серьезный инструмент, попробуйте spacy spacy.io - person alvas; 06.06.2017