Cả Stemmer hoặc lemmatizer có thể giúp bạn có được từ 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'
Nhưng có vẻ như bạn có thể tận dụng một số tính chất tốt đẹp của các tagset PennTreeBank để có được từ greatest -> great
:
>>> from nltk import pos_tag
>>> pos_tag(['greatest'])
[('greatest', 'JJS')]
>>> pos_tag(['greater'])
[('greater', 'JJR')]
>>> pos_tag(['great'])
[('great', 'JJ')]
Hãy thử hệ thống dựa trên quy tắc điên rồ, hãy bắt đầu từ 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'
Bây giờ chúng ta biết rằng chúng ta có thể xây dựng trình biên dịch gốc/lemmatizer/tail_substituter của chúng ta, hãy viết một quy tắc cho biết nếu một từ cung cấp thẻ POS so sánh nhất và số tail_substituter
của chúng ta cho JJ khi chúng ta bắt đầu và JJR khi chúng ta chuyển đổi, chúng ta có thể an toàn nói rằng hình thức so sánh và cơ sở của từ có thể dễ dàng nhận với tail_substituter
của chúng tôi:
>>> 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'
Bây giờ mà được bạn khỏi greatest -> greater -> great
. Từ great -> best
là loại kỳ lạ, vì từ vựng chúng không liên quan mặc dù tương đối ngữ nghĩa của chúng có vẻ liên quan.
Vì vậy, tôi nghĩ rằng nó sẽ là chủ quan để nói rằng great -> best
là một sự chuyển đổi hợp lệ
Lemmatize, không ngăn chặn. Ngoài ra, bạn có thể xây dựng trên "bảng gì ... cảm giác?" –
Greatest to great có thể được đưa ra bởi một người viết bài nói từng phần, xem JJ, JJR, JJS tại đây https://gate.ac.uk/sale/tao/splitap7.html#x39-802000G. Là một đề xuất thực sự được tìm nạp nhiều, bạn có thể xem xét các từ nhúng: https://code.google.com/p/word2vec/ Đóng các từ không phải là từ đồng nghĩa nhưng có lẽ việc điều chỉnh mô hình và đào tạo trên dữ liệu phù hợp có thể tạo ra các từ đồng nghĩa . Hoặc nhận được giao điểm giữa các kết quả từ điển đồng nghĩa và cụm từ. – Yasen