精通Python自然語言處理 4 :詞性標註--單詞識別
詞性標註被用於資訊檢索、機器翻譯、NER、語言分析等
1、詞性標註簡介
一個對句中的每個識別符號分配詞類(如名詞、動詞、形容詞等)標記的過程。在nltk.tag包中並被TaggerIbase類所繼承。
>>> text1 = nltk.word_tokenize("It is a pleasnat day today")
>>> nltk.pos_tag(text1)
[('It', 'PRP'), ('is', 'VBZ'), ('a', 'DT'), ('pleasnat', 'JJ'), ('day', 'NN'), ('today', 'NN')]
Penn Treebank的標記列表https://www.ling.upenn.edu/courses/Fall_2003/ling001/penn_treebank_pos.html>>> nltk.help.upenn_tagset('VB.*')
在NLTK中,已標註的識別符號呈現為一個由識別符號及其標記組成的元組。
>>> taggedword = nltk.tag.str2tuple('bear/NN') # 識別符號及其標記組成的元組
>>> taggedword
('bear', 'NN')
>>> taggedtok = ('bear', 'NN') # 單詞及其詞性標記
>>> nltk.tag.util.tuple2str(taggedtok)
'bear/NN'
預設標識:DefaultTagger類2、建立詞性標註語料庫
一個語料庫可以認為是文件的集合。一個語料庫是多個語料庫的集合。
>>> from nltk.corpus import words
>>> words.fileids()
[u'en', u'en-basic']
>>> len(words.words('en'))
235886
3、選擇一種機器學習演算法
詞性標註也被稱為詞義消歧或語法標註
在訓練詞性分類器時,會生成一個特徵集。大體組成如下:
- 當前單詞的資訊
- 上一個單詞或字首的資訊
- 下一個單詞或字尾的資訊
在NLTK中,FastBrillTagger類是基於一元語法的。它使用一個包含已知單詞及其詞性標記資訊的字典。
4、涉及n-gram的統計建模
一元語法意味著一個獨立的單詞,在一元語法標註器中,單個的識別符號用於查詢特定的詞性標記。
可以通過在初始化標註器時提供一個句子的列表來執行UnigramTagger的訓練
>>> from nltk.tag import UnigramTagger
>>> from nltk.corpus import treebank
>>> training = treebank.tagged_sents()[:7000] # 使用前7000個句子進行訓練
>>> unitagger = UnigramTagger(training)
>>> treebank.sents()[0]
[u'Pierre', u'Vinken', u',', u'61', u'years', u'old', u',', u'will', u'join', u'the', u'board', u'as', u'a', u'nonexecutive', u'director', u'Nov.', u'29', u'.']
>>> unitagger.tag(treebank.sents()[0])
[(u'Pierre', u'NNP'), (u'Vinken', u'NNP'), (u',', u','), (u'61', u'CD'), (u'years', u'NNS'), (u'old', u'JJ'), (u',', u','), (u'will', u'MD'), (u'join', u'VB'), (u'the', u'DT'), (u'board', u'NN'), (u'as', u'IN'), (u'a', u'DT'), (u'nonexecutive', u'JJ'), (u'director', u'NN'), (u'Nov.', u'NNP'), (u'29', u'CD'), (u'.', u'.')]
要評估UnigramTagger,下面用於計算其準確性的程式碼:準確率為96%
>>> testing = treebank.tagged_sents()[2000:]
>>> unitagger.evaluate(testing)
0.9634419196584355 --> 96%
5、使用詞性標註語料庫開發分塊器
分塊是一個可用於執行實體識別的過程。它用於分割和標記居中的多個識別符號序列
首先定義分塊語法,包含了有關如何進行分塊的規則。如下名詞短語分塊:
>>> sent = [("A","DT"),("wise","JJ"),("small","JJ"),("girl","NN"),("of","IN"),("village","NN"),("became","VBD"),("leader","NN")]
>>> grammar = "NP: {<DT>?<JJ>*<NN><IN>?<NN>*}"
>>> find = nltk.RegexpParser(grammar)
>>> res = find.parse(sent)
>>> print(res)
(S
(NP A/DT wise/JJ small/JJ girl/NN of/IN village/NN)
became/VBD
(NP leader/NN))
生成解析樹: res.draw()
分塊是語塊的一部分被消除的過程,既可以使用整個語塊,也可以使用語塊中間的一部分並刪除剩餘的部分,或者也可以使用語塊從開始或結尾擷取的一部分並刪除剩餘的部分。
相關文章
- Python自然語言處理實戰(4):詞性標註與命名實體識別Python自然語言處理詞性標註
- 自然語言處理工具pyhanlp分詞與詞性標註自然語言處理HanLP分詞詞性標註
- Pyhanlp自然語言處理中的新詞識別HanLP自然語言處理
- 詞!自然語言處理之詞全解和Python實戰!自然語言處理Python
- 自然語言處理:分詞方法自然語言處理分詞
- 自然語言處理之jieba分詞自然語言處理Jieba分詞
- NPL---自然語言處理單詞界定問題自然語言處理
- 自然語言處理NLP(6)——詞法分析自然語言處理詞法分析
- Python 自然語言處理(基於jieba分詞和NLTK)Python自然語言處理Jieba分詞
- Python自然語言處理實戰(3):中文分詞技術Python自然語言處理中文分詞
- 精通Python自然語言處理 1 :字串操作Python自然語言處理字串
- 精通Python自然語言處理 2 :統計語言建模Python自然語言處理
- python的詞性標註Python詞性標註
- 入門自然語言處理必看:圖解詞向量自然語言處理圖解
- 精通Python自然語言處理 3 :形態學Python自然語言處理
- 自然語言處理中的分詞問題總結自然語言處理分詞
- NLP自然語言處理中的hanlp分詞例項自然語言處理HanLP分詞
- Hanlp自然語言處理中的詞典格式說明HanLP自然語言處理
- 自然語言處理之序列標註問題自然語言處理
- 05.序列模型 W2.自然語言處理與詞嵌入模型自然語言處理
- jieba 詞性標註 & 並行分詞Jieba詞性標註並行分詞
- 自然語言處理標註工具——Brat(安裝、測試、使用)自然語言處理
- pyhanlp 中文詞性標註與分詞簡介HanLP詞性標註分詞
- Hanlp自然語言處理工具之詞法分析器HanLP自然語言處理詞法分析
- 中文自然語言處理工具集:分詞,相似度匹配自然語言處理分詞
- hanlp自然語言處理包的人名識別程式碼解析HanLP自然語言處理
- C語言英文單詞C語言
- 自然語言處理工具hanlp定製使用者詞條自然語言處理HanLP
- 自然語言處理工具HanLP-N最短路徑分詞自然語言處理HanLP分詞
- 自然語言處理工具中的中文分詞器介紹自然語言處理中文分詞
- 自然語言處理工具hanlp自定義詞彙新增圖解自然語言處理HanLP圖解
- 自然語言處理工具python呼叫hanlp中文實體識別自然語言處理PythonHanLP
- NLP自然語言處理中英文分詞工具集錦與基本使用介紹自然語言處理分詞
- 自然語言處理(NLP)系列(一)——自然語言理解(NLU)自然語言處理
- Python文字處理NLP:分詞與詞雲圖Python分詞
- Python 英語單詞本Python
- HanLP 自然語言處理 for nodejsHanLP自然語言處理NodeJS
- 自然語言處理NLP(四)自然語言處理