2017-06-05 5 views
0

Ich habe versucht, ein Wort aus dem Quran Holy Book zu lemmatisieren, aber einige Wörter können nicht lemmatisiert werden.Warum kann NLTK Lemmatizer einige Pluralwörter nicht lemmatisieren?

hier ist mein Satz:

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" 

dieser Satz ein Teil meiner txt-Datensatz ist. wie Sie sehen können, gibt es "Surahs", die eine Pluralform von "Surah" ist. Ich habe versucht, meine Codes:

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

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

, die, wenn ich laufen und drucken, ist das Ergebnis wie folgt aus:

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

die ‚Suren‘ nicht in ‚surah‘ geändert wird.

kann jeder sagen warum? Vielen Dank.

+0

Es ist nichts falsch mit dem wordnetlemmatizer per se, aber es kann einfach nicht unregelmäßig Worte gut genug behandeln. Sie könnten versuchen, diese "Hack" - https://StackOverflow.com/Questions/22333392/Stemming-Some-Plural-Swordnet-Lemmatizer-doesnt-work –

+0

Ich habe diesen Hack versucht, aber es gibt keine [] – sang

Antwort

1

Siehe

Für die meisten Nicht-Standard-englisches Wort, WordNet Lemmatizer nicht viel helfen in die richtige Lemma, versuchen Sie einen stemmer:

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

Versuchen Sie auch, den lemmatize_sent in earthy (einen nltk Wrapper „schamlose Werbung“):

>>> 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' 
+0

wow, danke. das ist cool. aber was ist "erdiges" Modul und wo kann ich das bekommen? Ich kann nicht "erdig" nennen, der Name des Moduls ist nicht definiert. – sang

+0

'pip install -U erdig' – alvas

+0

wow cool danke, ich habe installiert. Gibt es Bücher oder Tutorials für die erdige Bibliothek? – sang

Verwandte Themen