1. 程式人生 > >人工智慧:python 實現 第十章,NLP 第二天 基於詞義的詞形還原

人工智慧:python 實現 第十章,NLP 第二天 基於詞義的詞形還原

基於詞義的詞形還原

lemmatization 是另一種詞形還原的方式。 在前一節中,我們可以明白從詞幹中提取詞的基本形式沒有任何意義。例如,三個三個詞幹提取器都顯示calves的基本形式是calv,但它並不是一個真正的單詞。Lemmatization 採取了一種更具結構化的方法解決了這個問題。

lemmatizatio原理是使用語法和詞態分析器進行單詞分析,它包含了去除了如ing和ed等字尾的單詞基本形式,所有基本的形式的單詞集合被稱作為字典。如果你使用lemmatization對calves進行詞形還原,將輸出calf。值得注意的是單詞基本形式的輸出依賴於該詞是動詞還是名詞。下面讓我們看看如何使用NLTK

建立 一個姓的python 檔案 並且匯入 下列包:

from nltk.stem import WordNetLemmatizer

定義輸入單詞。我們將使用先前使用的單詞集以便我們能夠比較輸出結果

input_words =['writing','calves','be',branded','horse','randomize','possibly','provision',hospital,‘hospital','kept','scratchy','code']

建立一個lemmatizer物件

#建立物件

lemmatizer = WordNetLemmatizer()

為顯示列表建立名字和格式

#建立顯示列表名字

lemmatizer_names =['noun Lemmatizer','verb lemmatizer']

formatted_text = '{:>24}'*(len(lemmatizer_names)+1)

print('\n',formatted_text.format('INPUT WORD'),*lemmatizer_names,'\n','='*75)

輸入單詞集並使用動詞和名詞詞形還原器還原單詞:

#對每一個單詞進行還原並輸出

for word in input_words:

     output =[word,lemmatizer.lemmatize(word,pos='n'),lemmatizer.lemmatize(word,pos='v')]

    print(formatted_text.format(*output))

完整程式碼如下

from nltk.stem import WordNetLemmatizer

input_words = ['writing', 'calves', 'be', 'branded', 'horse', 'randomize', 
        'possibly', 'provision', 'hospital', 'kept', 'scratchy', 'code']

# 建立 lemmatizer物件 
lemmatizer = WordNetLemmatizer()

# 建立輸出表格格式
lemmatizer_names = ['NOUN LEMMATIZER', 'VERB LEMMATIZER']
formatted_text = '{:>24}' * (len(lemmatizer_names) + 1)
print('\n', formatted_text.format('INPUT WORD', *lemmatizer_names), 
        '\n', '='*75)

#對輸入的單詞進行還原並輸出
for word in input_words:
    output = [word, lemmatizer.lemmatize(word, pos='n'),lemmatizer.lemmatize(word, pos='v')]
    print(formatted_text.format(*output))

執行結果:


我們能看到,當遇到形如writing或者calves 這些單詞時,名詞還原器和動詞還原器分詞結果是不一樣的 。如果將這些輸出與之前的stemmer 的輸出結果相比,這兩者的結果也有不同。基於字典的分詞方式比基於規則的方式是更準確的還原單詞,更加有意義。