日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

第3章 词性标注(pos、N-gram、NER等标注器)

發布時間:2023/12/18 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第3章 词性标注(pos、N-gram、NER等标注器) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

第3章 詞性標注

1.什么是詞性標注?
詞性(POS)主要指比如名詞,形容詞,動詞等等。雖然目前最先進的詞性標注算法在預測給定單詞的詞性上已經有了較高的精確度(約97%)。
首先,我們需要學習一些現成的POS標注器。
主要的詞性有哪些呢?

標簽相關說明
NNP專用名詞的單數形式
NNPS專用名詞的復數形式
PDT前置限定詞
POS所有格結束符
PRP人稱代詞
PRP$所有格代詞
RB副詞
RBR相對副詞
RBS最高級副詞
RP小品詞
SYM符號(數學符號或特殊符號)
TOTo
UH嘆詞
VB動詞的基本形式
VBD動詞的過去式
VBG動詞的動名詞用法
VBN動詞的過去分詞
WPWh-代詞
WP$所有格wh-代詞
WRBWh-副詞
#井號符
$美元符
.句號
逗號
分號,分隔符
(左括號
右括號
"直雙引號
左單引號
左雙引號
右單引號
右雙引號

2.利用pos標注器
簡單代碼:

import nltk from nltk import word_tokenize s="I was watching TV." print(nltk.pos_tag(word_tokenize(s)))

結果顯示:

D:\IR_lab\venv\Scripts\python.exe D:/IR_lab/learn.py[('I', 'PRP'), ('was', 'VBD'), ('watching', 'VBG'), ('TV', 'NN'), ('.', '.')]Process finished with exit code 0

其中
PRP----人稱代詞
VBD—動詞的過去式
VBG—動詞的動名詞用法
NN—專用名詞

篩選詞性
比如篩選出名次:

#導入庫 import nltk from nltk import word_tokenize s="I was watching TV." #對字符串s標注 tagged=nltk.pos_tag(word_tokenize(s)) #輸出所有詞性里邊的名詞 all_noun=[word for word ,pos in tagged if pos in ['NN','mnp']] print(all_noun)

結果:

D:\IR_lab\venv\Scripts\python.exe D:/IR_lab/learn.py ['TV']Process finished with exit code 0

注意:不能在詞性標注之前刪除停用詞,否則語義不通

雖然Pos標注器能夠區分不同詞性,但其正確率并不高

3.順序標注器
N-gram標注器是一種順序標注器,會在其所在的上下文環境中標注出前n個單詞,并預測給定詞項的Pos標簽。

import nltk from nltk.corpus import brown #一元模型標注,只考慮條件概率 from nltk.tag import UnigramTagger from nltk.tag import DefaultTagger #會考慮給定單詞和該單詞前一個單詞 from nltk.tag import BigramTagger #與前面兩個都有關 from nltk.tag import TrigramTagger #brown訓練集 brown_tagged_sents = brown.tagged_sents(categories='news') default_tagger = nltk.DefaultTagger('NN') #訓練集 train_data=brown_tagged_sents[:int(len(brown_tagged_sents)*0.9)] test_data=brown_tagged_sents[int(len(brown_tagged_sents)*0.9):] #backoff是指當不能進行正確的標簽預測時會咨詢backoff #一元模型 unigram_tagger=UnigramTagger(train_data,backoff=default_tagger) print(unigram_tagger.evaluate(test_data)) #二元模型 bigram_tagger=BigramTagger(train_data,backoff=unigram_tagger) print(bigram_tagger.evaluate(test_data)) #三元模型 trigram_tagger=TrigramTagger(train_data,backoff=bigram_tagger) print(trigram_tagger.evaluate(test_data))

結果:

D:\IR_lab\venv\Scripts\python.exe D:/IR_lab/learn.py 0.8361407355726104 0.8452108043456593 0.843317053722715

4.正則表達式標注器
比如任何以ness結尾的詞很可能是名次。NLTK的RegexpTagger參數會為我們提供基于POS模式的標注。
代碼如下:

#導入訓練集 from nltk.corpus import brown #NLTK正則標注器 from nltk.tag.sequential import RegexpTagger #對詞性進行標注 brown_tagged_sents = brown.tagged_sents(categories='news') #測試集 test_data = brown_tagged_sents[int(len(brown_tagged_sents) * 0.9):] regexp_tagger=RegexpTagger([ ( r'^-?[0-9]+(.[0-9]+)?$', 'CD'), ( r'(The|the|A|a|An|an)$', 'AT'), ( r'.*able$', 'JJ'), ( r'.*ness$', 'NN'), #以Ness結尾大多是名詞 ( r'.*ly$', 'RB'), #以ly結尾大多是副詞 ( r'.*s$', 'NNS'), #以s結尾的大多是復數名詞 (r'.*ing$', 'VBG'), #以ing結尾的大多是動名詞 (r'.*ed$', 'VBD'), #以ed結尾的大多數是動詞過去式 (r'.*', 'NN') ]) print(regexp_tagger.evaluate(test_data))

結果如下:

D:\IR_lab\venv\Scripts\python.exe D:/IR_lab/learn.py 0.31306687929831556

正確率大約有30%

5.命名實體識別(NER)
NER主要由實體名、位置和組織等。NLTK庫提供了ne_chunk方法。需要先對語句進行標識化處理,然后再進行語塊分解和詞性標注的處理順序,之后進行命名實體標注。
簡單看一看

import nltk from nltk import word_tokenize from nltk import ne_chunk sent="Mark is studying at Stanford University in California" print(ne_chunk(nltk.pos_tag(word_tokenize(sent)),binary=False))

結果如下:

D:\IR_lab\venv\Scripts\python.exe D:/IR_lab/learn.py (S(PERSON Mark/NNP)is/VBZstudying/VBGat/IN(ORGANIZATION Stanford/NNP University/NNP)in/IN(GPE California/NNP))

no_chunk能夠識別相關人名,地點和組織。

本章小結
主要學習的是關于詞性標注。主要方法有利用POS標注器、N-gram標注還有正則表達式標注
也虛席了NER標注器。

總結

以上是生活随笔為你收集整理的第3章 词性标注(pos、N-gram、NER等标注器)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。