2013-04-04 75 views
1

給定一個像這樣的單詞列表['add','adds','adding','added','addition'],我想幹所有的單詞'add'。這意味着將一個詞的所有不同的動詞和名詞形式(但不是它的形容詞和副詞形式)合爲一個。還有什麼其他選擇可以阻止?

我找不到任何這樣做的stemmer。最近的一個,我發現是PorterStemmer,但它的莖上面的列表[「添加」,「添加」,「廣告」,「廣告」,「ADDIT」]

我不是很有經驗的詞幹技術。所以,我想問一下,是否有任何可用的stemmer可以完成我上面解釋的內容?如果沒有,你有什麼建議如何實現這一目標?

非常感謝,

+3

你要找的是一個'lemmatizer'而不是詞幹,也是一個相當強的一個,因爲從'addition' =>'add',需要很多知識。我有一個英語形態詞形解析器,適用於'verb' +'morpheme' =>'verbs'和'nouns' +'morpheme'成名詞。一旦我完成其他工作,我可以在下週發佈代碼。你急需嗎? – alvas 2013-04-05 06:24:49

+0

NLTK中的WordNet lemmatizer接近此,但它需要POS標籤才能獲得好的結果。儘管如此,它不會執行addition => add。 – 2013-04-05 09:14:17

+0

@ 2er0:那太棒了!非常感謝。下週對我來說會很好。+ 1 – chepukha 2013-04-05 17:00:16

回答

0

所產生的想法是,以減少不同形式的同一個詞的一個單一的「基地」的形式。這不是你要求的,所以可能沒有現有的幹部工作者(至少不是有目的)滿足你的需求。因此,針對您的問題的明顯解決方案是:如果您有自己的自定義規則,則必須實施它們。

你不會多說你的要求。根據你的需要,你必須從頭開始。如果porter stemmter接近您的需求,但在某些特殊情況下,您可以手動編寫一些覆蓋,並使用現有的stemmer來處理其他情況。

+2

謝謝,Achim。正如2ero在上面指出的那樣,我正在尋找的任務是[lemmatisation](http://en.wikipedia.org/wiki/Lemmatisation)而不是詞幹。 – chepukha 2013-04-05 17:09:27

1

Lemmatization應導致更好的結果比詞幹(source):

詞幹通常指的是一種粗略的過程,正確地砍掉字的兩端在實現這一目標的最希望的時間,並經常包括刪除派生詞綴。

詞形還原通常是指適當地做事與使用的話詞彙和形態分析的,通常旨在僅除去變化詞尾並返回一個字,這被稱爲外稃的基部或字典形式。

詞形還原在NTLK支持爲nltk.stem包的一部分:

import nltk 

l = nltk.stem.WordNetLemmatizer() 
l.lemmatize('dogs')  # -> 'dog' 
l.lemmatize('addition') # -> 'addition' 

s = nltk.stem.snowball.EnglishStemmer() 
s.stem('dogs')   # -> 'dog' 
s.stem('addition')  # -> 'addit' 

如果lemmatizer不承認的話,也不會更改。一個缺陷是,默認情況下所有單詞都被認爲是名詞。要覆蓋這種行爲,你必須設置pos的說法,這是默認設置爲pos='n'

s.stem('better')    # -> 'better' 
l.lemmatize('better')   # -> 'better' 
l.lemmatize('better', pos='a') # -> 'good' 
相關問題