2016-02-29 68 views
2

我要幹近代早期英國的文字:如何幹莎士比亞/ KJV使用nltk.stem.snowball

sb.stem("loveth") 
>>> "lov" 

顯然,所有我需要做的是a small tweak的雪球施特默爾:

而且把結局變成了英語詞幹,列表

版edly荷蘭國際集團ingly

步驟1b的

應擴展到

編edly荷蘭國際集團ingly EST ETH

至於雪球腳本而言,詞尾 'EST' 'ETH' 必須對加入結束'ing'。

好的,所以我只需要更改變量。也許增加一條特殊規則來處理「你」和「你」/「將」。該NLTK documentation顯示變量:

nltk.stem.snowball.EnglishStemmer(ignore_stopwords = FALSE)

基地: nltk.stem.snowball._StandardStemmer

英語雪球幹手。

變量:

__vowels - 英語元音。

__double_consonants - 英語雙輔音。

__li_ending - 可能會直接出現在單詞final'li'之前的字母。

__step0_suffixes - 算法步驟0中要刪除的後綴。

__step1a_suffixes - 算法步驟1a中要刪除的後綴。

__step1b_suffixes - 在算法的步驟1b中要刪除的後綴。 (這裏我們去)

__step2_suffixes - 在算法的第2步中要刪除的後綴。

__step3_suffixes - 在算法的第3步中要刪除的後綴。

__step4_suffixes - 算法步驟4中要刪除的後綴。

__step5_suffixes - 在算法的第5步中要刪除的後綴。

__special_words - 包含必須特別設定的詞的詞典。 (在這裏我可以堅持我的 「你」/ 「你」 和 「必」 的問題)現在

,愚蠢的問題。如何更改變量?我到處都已經看過了變數,我不斷收到「對象有沒有屬性」 ...

回答

1

嘗試:

>>> from nltk.stem import snowball 
>>> stemmer = snowball.EnglishStemmer() 
>>> stemmer.stem('thee') 
u'thee' 
>>> dir(stemmer) 
['_EnglishStemmer__double_consonants', '_EnglishStemmer__li_ending', '_EnglishStemmer__special_words', '_EnglishStemmer__step0_suffixes', '_EnglishStemmer__step1a_suffixes', '_EnglishStemmer__step1b_suffixes', '_EnglishStemmer__step2_suffixes', '_EnglishStemmer__step3_suffixes', '_EnglishStemmer__step4_suffixes', '_EnglishStemmer__step5_suffixes', '_EnglishStemmer__vowels', '__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__unicode__', '__weakref__', '_r1r2_standard', '_rv_standard', 'stem', 'stopwords', 'unicode_repr'] 
>>> stemmer._EnglishStemmer__special_words 
{u'exceeds': u'exceed', u'inning': u'inning', u'exceed': u'exceed', u'exceeding': u'exceed', u'succeeds': u'succeed', u'succeeded': u'succeed', u'skis': u'ski', u'gently': u'gentl', u'singly': u'singl', u'cannings': u'canning', u'early': u'earli', u'earring': u'earring', u'bias': u'bias', u'tying': u'tie', u'exceeded': u'exceed', u'news': u'news', u'herring': u'herring', u'proceeds': u'proceed', u'succeeding': u'succeed', u'innings': u'inning', u'proceeded': u'proceed', u'proceed': u'proceed', u'dying': u'die', u'outing': u'outing', u'sky': u'sky', u'andes': u'andes', u'idly': u'idl', u'outings': u'outing', u'ugly': u'ugli', u'only': u'onli', u'proceeding': u'proceed', u'lying': u'lie', u'howe': u'howe', u'atlas': u'atlas', u'earrings': u'earring', u'cosmos': u'cosmos', u'canning': u'canning', u'succeed': u'succeed', u'herrings': u'herring', u'skies': u'sky'} 
>>> stemmer._EnglishStemmer__special_words['thee'] = 'thou' 
>>> stemmer.stem('thee') 
'thou' 

和:

>>> stemmer._EnglishStemmer__step0_suffixes 
(u"'s'", u"'s", u"'") 
>>> stemmer._EnglishStemmer__step1a_suffixes 
(u'sses', u'ied', u'ies', u'us', u'ss', u's') 
>>> stemmer._EnglishStemmer__step1b_suffixes 
(u'eedly', u'ingly', u'edly', u'eed', u'ing', u'ed') 
>>> stemmer._EnglishStemmer__step2_suffixes 
(u'ization', u'ational', u'fulness', u'ousness', u'iveness', u'tional', u'biliti', u'lessli', u'entli', u'ation', u'alism', u'aliti', u'ousli', u'iviti', u'fulli', u'enci', u'anci', u'abli', u'izer', u'ator', u'alli', u'bli', u'ogi', u'li') 
>>> stemmer._EnglishStemmer__step3_suffixes 
(u'ational', u'tional', u'alize', u'icate', u'iciti', u'ative', u'ical', u'ness', u'ful') 
>>> stemmer._EnglishStemmer__step4_suffixes 
(u'ement', u'ance', u'ence', u'able', u'ible', u'ment', u'ant', u'ent', u'ism', u'ate', u'iti', u'ous', u'ive', u'ize', u'ion', u'al', u'er', u'ic') 
>>> stemmer._EnglishStemmer__step5_suffixes 
(u'e', u'l') 

注意步驟後綴元組並且是不可變的,所以你不能添加或添加到他們像特殊的話,你就必須「複製」和投列出,並追加到它,然後將其覆蓋,如:

>>> from nltk.stem import snowball 
>>> stemmer = snowball.EnglishStemmer() 
>>> stemmer._EnglishStemmer__step1b_suffixes 
[u'eedly', u'ingly', u'edly', u'eed', u'ing', u'ed', 'eth'] 
>>> step1b = stemmer._EnglishStemmer__step1b_suffixes 
>>> stemmer._EnglishStemmer__step1b_suffixes = list(step1b) + ['eth'] 
>>> stemmer.stem('loveth') 
u'love'