Ani stemmer lub lemmatizer może Ci z greatest
->great
:
>>> from nltk.stem import WordNetLemmatizer
>>> from nltk.stem import WordNetLemmatizer, PorterStemmer
>>> porter = PorterStemmer()
>>> wnl = WordNetLemmatizer()
>>> greatest = 'greatest'
>>> porter.stem(greatest)
u'greatest'
>>> wnl.lemmatize(greatest)
'greatest'
>>> greater = 'greater'
>>> wnl.lemmatize(greater)
'greater'
>>> porter.stem(greater)
u'greater'
Ale wydaje się, że można skorzystać z kilku przyjemnych właściwości tagset PennTreeBank dostać od greatest -> great
:
>>> from nltk import pos_tag
>>> pos_tag(['greatest'])
[('greatest', 'JJS')]
>>> pos_tag(['greater'])
[('greater', 'JJR')]
>>> pos_tag(['great'])
[('great', 'JJ')]
Spróbujmy zwariowanego systemu opartego na regułach, zacznijmy od greatest
:
>>> import re
>>> word1 = 'greatest'
>>> re.sub('est$', '', word1)
'great'
>>> re.sub('est$', 'er', word1)
'greater'
>>> pos_tag([re.sub('est$', '', word1)])[0][1]
'JJ'
>>> pos_tag([re.sub('est$', 'er', word1)])[0][1]
'JJR'
>>> word1
'greatest'
Teraz, gdy wiemy, że możemy zbudować własny, mały superlatywowy łodyg/lemmatizer/tail_substituter, napiszmy regułę, która mówi, że jeśli słowo daje superlatywowy znacznik POS, a nasz tail_substituter
daje nam JJ, gdy się wywodzi i JJR, kiedy konwertujemy, możemy śmiało powiedzieć, że baza porównawcza i forma słowa można łatwo zdobyć z naszymi tail_substituter
:
>>> if pos_tag([word1])[0][1] == 'JJS' \
... and pos_tag([re.sub('est$', '', word1)])[0][1] == 'JJ' \
... and pos_tag([re.sub('est$', 'er', word1)])[0][1] == 'JJR':
... comparative = re.sub('est$', 'er', word1)
... adjective = re.sub('est$', '', word1)
...
>>> adjective
'great'
>>> comparative
'greater'
teraz, gdy dostaje od greatest -> greater -> great
. Od great -> best
jest trochę dziwne, ponieważ leksykalnie nie są one spokrewnione, chociaż ich relacja semantyczna wydaje się być powiązana.
więc myślę, że byłoby to subiektywna powiedzieć, że jest to ważny great -> best
transformacja
Lemmatize, nie wynikają. Czy mógłbyś także rozwinąć temat "jaki stół ... sens?" –
Największy do świetności może prawdopodobnie zostać przekazany przez taggera częściowego, patrz JJ, JJR, JJS tutaj https://gate.ac.uk/sale/tao/splitap7.html#x39-802000G. Jako bardzo daleko idąca sugestia, możesz zajrzeć do osadzania słów: https://code.google.com/p/word2vec/ Zamknięte słowa nie są synonimami, ale być może dostosowanie modelu i szkolenie na właściwych danych może wygenerować synonimy . Lub uzyskaj przecięcie wyników tezaurusa z klastrami słów. – Yasen