激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - Python自然語言處理之詞干,詞形與最大匹配算法代碼詳解

Python自然語言處理之詞干,詞形與最大匹配算法代碼詳解

2020-12-18 00:33白馬負金羈 Python

這篇文章主要介紹了Python自然語言處理之詞干,詞形與MaxMatch算法代碼詳解,涉及詞干提取,詞形還原,簡單總結了二者的區別和聯系,最后還分享了最大匹配算法的相關示例,具有一定參考價值,需要的朋友可以了解下。

本文主要對詞干提取及詞形還原以及最大匹配算法進行了介紹和代碼示例,Python實現,下面我們一起看看具體內容。

自然語言處理中一個很重要的操作就是所謂的stemming和lemmatization,二者非常類似。它們是詞形規范化的兩類重要方式,都能夠達到有效歸并詞形的目的,二者既有聯系也有區別。

1、詞干提?。╯temming)

定義:Stemmingistheprocessforreducinginflected(orsometimesderived)wordstotheirstem,baseorrootform—generallyawrittenwordform.

解釋一下,Stemming是抽取詞的詞干或詞根形式(不一定能夠表達完整語義)。

NLTK中提供了三種最常用的詞干提取器接口,即Porterstemmer,LancasterStemmer和SnowballStemmer。

PorterStemmer基于Porter詞干提取算法,來看例子

?
1
2
3
4
5
6
7
8
9
10
11
12
>>> from nltk.stem.porter import PorterStemmer
>>> porter_stemmer = PorterStemmer()
>>> porter_stemmer.stem(‘maximum')
u'maximum'
>>> porter_stemmer.stem(‘presumably')
u'presum'
>>> porter_stemmer.stem(‘multiply')
u'multipli'
>>> porter_stemmer.stem(‘provision')
u'provis'
>>> porter_stemmer.stem(‘owed')
u'owe'

Lancaster Stemmer 基于Lancaster 詞干提取算法,來看例子

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
>>> from nltk.stem.lancaster import LancasterStemmer
>>> lancaster_stemmer = LancasterStemmer()
>>> lancaster_stemmer.stem(‘maximum')
‘maxim'
>>> lancaster_stemmer.stem(‘presumably')
‘presum'
>>> lancaster_stemmer.stem(‘presumably')
‘presum'
>>> lancaster_stemmer.stem(‘multiply')
‘multiply'
>>> lancaster_stemmer.stem(‘provision')
u'provid'
>>> lancaster_stemmer.stem(‘owed')
‘ow'

Snowball Stemmer基于Snowball 詞干提取算法,來看例子

?
1
2
3
4
5
6
7
8
9
10
11
12
>>> from nltk.stem import SnowballStemmer
>>> snowball_stemmer = SnowballStemmer(“english”)
>>> snowball_stemmer.stem(‘maximum')
u'maximum'
>>> snowball_stemmer.stem(‘presumably')
u'presum'
>>> snowball_stemmer.stem(‘multiply')
u'multipli'
>>> snowball_stemmer.stem(‘provision')
u'provis'
>>> snowball_stemmer.stem(‘owed')
u'owe'

2、詞形還原(lemmatization)

定義:Lemmatisation(orlemmatization)inlinguistics,istheprocessofgroupingtogetherthedifferentinflectedformsofawordsotheycanbeanalysedasasingleitem.

可見,Lemmatisation是把一個任何形式的語言詞匯還原為一般形式(能表達完整語義)。相對而言,詞干提取是簡單的輕量級的詞形歸并方式,最后獲得的結果為詞干,并不一定具有實際意義。詞形還原處理相對復雜,獲得結果為詞的原形,能夠承載一定意義,與詞干提取相比,更具有研究和應用價值。

我們會在后面給出一個同MaxMatch算法相結合的更為復雜的例子。

這里介紹下詞干提取和詞形還原的聯系與區別:

詞形還原(lemmatization),是把一個任何形式的語言詞匯還原為一般形式(能表達完整語義),而詞干提取

(stemming)是抽取詞的詞干或詞根形式(不一定能夠表達完整語義)。詞形還原和詞干提取是詞形規范化的兩類

重要方式,都能夠達到有效歸并詞形的目的,二者既有聯系也有區別

現將共同點和聯系總結為以下4方面:

(1)目標一致。詞干提取和詞形還原的目標均為將詞的屈折形態或派生形態簡化或歸并為詞干(stem)

或原形的基礎形式,都是一種對詞的不同形態的統一歸并的過程。

(2)結果部分交叉。詞干提取和詞形還原不是互斥關系,其結果是有部分交叉的。一部分詞利用這兩類方法都能達到相同的詞形轉換效果。如“dogs”的詞

干為“dog”,其原形也為“dog”。

(3)主流實現方法類似。目前實現詞干提取和詞形還原的主流實現方法均是利用語言中存在的規則或利用詞典映射提取詞干或獲得詞的原形。

(4)應用領域相似。主要應用于信息檢索和文本、自然語言處理等方面,二者均是這些應用的基本步驟

二者的區別歸納為以下5方面:

(1)在原理上,詞干提取主要是采用“縮減”的方法,將詞轉換為詞干,如將“cats”處理為“cat”,將“effective”處理為“effect”。而詞形還原主要采用“轉變”

的方法,將詞轉變為其原形,如將“drove”處理為“drive”,將“driving”處理為“drive”。

(2)在復雜性上,詞干提取方法相對簡單,詞形還原則需要返回詞的原形,需要對詞形進行分析,不僅要進行詞綴的轉化,還要進行詞性識別,區分相同詞形但

原形不同的詞的差別。詞性標注的準確率也直接影響詞形還原的準確率,因此,詞形還原更為復雜。

(3)在實現方法上,雖然詞干提取和詞形還原實現的主流方法類似,但二者在具體實現上各有側重。詞干提取的實現方法主要利用規則變化進行詞綴的去除和縮減,從而達到詞的簡化效果。詞形還原則相對較復雜,有復雜的形態變化,單純依據規則無法很好地完成。其更依賴于詞典,進行詞形變化和原形的映射,生成詞典中的有效詞。

(4)在結果上,詞干提取和詞形還原也有部分區別。詞干提取的結果可能并不是完整的、具有意義的詞,而只是詞的一部分,如“revival”詞干提取的結果為“reviv”,“ailiner”詞干提取的結果為“airlin”。而經詞形還原處理后獲得的結果是具有一定意義的、完整的詞,一般為詞典中的有效詞。

(5)在應用領域上,同樣各有側重。雖然二者均被應用于信息檢索和文本處理中,但側重不同。詞干提取更多被應用于信息檢索領域,如Solr、Lucene等,用于擴展檢索,粒度較粗。詞形還原更主要被應用于文本挖掘、自然語言處理,用于更細粒度、更為準確的文本分析和表達

相對而言,詞干提取是簡單的輕量級的詞形歸并方式,最后獲得的結果為詞干,并不一定具有實際意義。詞形還原處理相對復雜,獲得結果為詞的原形,能夠承載一定意義,與詞干提取相比,更具有研究和應用價值

3、最大匹配算法(MaxMatch)

MaxMatch算法在中文自然語言處理中常常用來進行分詞(或許從名字上你已經能想到它是基于貪婪策略設計的一種算法)。通常,英語中一句話里的各個詞匯之間通過空格來分割,這是非常straightforward的,但是中文卻沒有這個遍歷。例如“我愛中華人民共和國”,這句話被分詞的結果可能是這樣的{‘我',‘愛',‘中華',‘人民',‘共和國'},又或者是{‘我',‘愛',‘中華人民共和國'},顯然我們更傾向于后者的分詞結果。因為‘中華人民共和國'顯然是一個專有名詞(把這樣一個詞分割來看顯然并不明智)。我們選擇后者的策略就是所謂的MaxMatch,即最大匹配。因為‘中華人民共和國'這個詞顯然要比‘中華',‘人民',‘共和國'這些詞都長。

我們可以通過一個英文的例子來演示MaxMatch算法(其實中文處理的道理也是一樣的)。算法從右側開始逐漸減少字符串長度,以此求得可能匹配的最大長度的字符串??紤]到我們所獲得的詞匯可能包含有某種詞型的變化,所以其中使用了Lemmatisation,然后在詞庫里進行匹配查找。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
from nltk.stem import WordNetLemmatizer
from nltk.corpus import words
 
wordlist = set(words.words())
wordnet_lemmatizer = WordNetLemmatizer()
 
def max_match(text):
  pos2 = len(text)
  result = ''
  while len(text) > 0:    
    word = wordnet_lemmatizer.lemmatize(text[0:pos2])
    if word in wordlist:
      result = result + text[0:pos2] + ' '
      text = text[pos2:]
      pos2 = len(text)
    else:
      pos2 = pos2-1        
  return result[0:-1]

來看看算法的實現效果

?
1
2
3
>>> string = 'theyarebirds'
>>> print(max_match(string))
they are birds

當然,上述代碼尚有一個不足,就是當字符串中存在非字母字符時(例如數字標點等),它可能會存在一些問題。有興趣的讀者不妨自己嘗試完善改進這個版本的實現。

總結

以上就是本文關于Python自然語言處理之詞干,詞形與MaxMatch算法代碼詳解的全部內容,希望對大家有所幫助。如有不足之處,歡迎留言指出。

原文鏈接:http://blog.csdn.net/baimafujinji/article/details/51069522

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 色女人在线| 国产九色在线播放九色 | 国产精品三级a三级三级午夜 | 国产免费视频一区二区裸体 | 亚洲人成电影在线 | av在线播放免费 | 天堂成人国产精品一区 | xnxx18日本| 国内精品久久久久久久久久久久 | 日本一区二区免费在线播放 | 成年人在线视频观看 | 黄色大片在线免费观看 | 一二区成人影院电影网 | 91短视频版高清在线观看www | 中国毛片在线观看 | 国产资源在线看 | 欧美77| 国产精品一区二av18款 | 午夜精品久久久久久中宇 | 亚洲综合一区在线观看 | 日韩av电影免费看 | 成人在线观看免费爱爱 | 成年免费视频黄网站在线观看 | 91av大片| 久久精品亚洲精品国产欧美kt∨ | 一区二区三区视频在线观看 | 亚洲九草 | 亚洲国产精品一区二区三区 | 日日久视频 | 午夜影院在线免费观看 | 一级爱爱 | 免费1级做55爰片l在线观看 | 免费中文视频 | 欧洲怡红院 | 国产亚洲精品成人a | 国产精品久久久久久模特 | 久久久青青草 | 中文字幕在线观看精品 | 天堂在线资源库 | 成人午夜精品久久久久久久蜜臀 | 依依成人精品视频 |