[TOC]
詞性標註器
之後的許多工作都需要標示完的詞彙。 nltk自帶英文標註器
pos_tag
import nltk text = nltk.word_tokenize("And now for something compleyely difference")print(text)print(nltk.pos_tag(text))
##標註語料庫表示已經標註的識別碼:
nltk.tag.str2tuple('word/類型')
text = "The/AT grand/JJ is/VBD ."print([nltk.tag.str2tuple(t) for t in text.split()])讀取已經標註的語料庫
nltk語料庫ue肚臍提供了統一接口,可以不必理會不同的文件格式。格式:語料庫.tagged_word()/tagged_sents()
。參數可以指定categories和fields
print(nltk.corpus.brown.tagged_words())名詞、動詞、形容詞等
這裡以名詞為例
from nltk.corpus import brown word_tag = nltk.FreqDist(brown.tagged_words(categories="news"))print([word+'/'+tag for (word,tag)in word_tag if tag.startswith('V')])################下面是查找money的不同标注#################################wsj = brown.tagged_words(categories="news") cfd = nltk.ConditionalFreqDist(wsj)print(cfd['money'].keys())嘗試找出每個名詞類型中最頻繁的名詞
def findtag(tag_prefix,tagged_text): cfd = nltk.ConditionalFreqDist((tag,word) for (word,tag) in tagged_text if tag.startswith(tag_prefix))return dict((tag,list(cfd[tag].keys())[:5]) for tag in cfd.conditions())#数据类型必须转换为list才能进行切片操作tagdict = findtag('NN',nltk.corpus.brown.tagged_words(categories="news"))for tag in sorted(tagdict):print(tag,tagdict[tag])探索已經標註的語料庫
需要nltk.bigrams()
和
nltk.trigrams(),分別對應2-gram模型和3-gram模型。
brown_tagged = brown.tagged_words(categories="learned") tags = [b[1] for (a,b) in nltk.bigrams(brown_tagged) if a[0]=="often"] fd = nltk.FreqDist(tags) fd.tabulate()
自動標註預設標註器
最簡單的標註器是為每個標識符分配統一標記。下面就是一個將所有字都變成NN的標註器。並且用evaluate()
進行檢定。當很多字詞是名詞時候,它有利於第一次分析並提高穩定性。
brown_tagged_sents = brown.tagged_sents(categories="news") raw = 'I do not like eggs and ham, I do not like them Sam I am'tokens = nltk.word_tokenize(raw) default_tagger = nltk.DefaultTagger('NN')#创建标注器print(default_tagger.tag(tokens)) # 调用tag()方法进行标注print(default_tagger.evaluate(brown_tagged_sents))正規表示式標註器
注意這裡規則是固定(由自己決定)。當規則越來越完善的時候,精確度越高。
patterns = [ (r'.*ing$','VBG'), (r'.*ed$','VBD'), (r'.*es$','VBZ'), (r'.*','NN')#为了方便,只有少量规则] regexp_tagger = nltk.RegexpTagger(patterns) regexp_tagger.evaluate(brown_tagged_sents)查詢標註器
這裡和書裡是有差別的,不同於python2,注意調試。而查詢標註器就是儲存最有可能的標記,並且可以設定backoff
參數,不能標記的情況下,就使用這個標註器(這個過程是
回退)
fd = nltk.FreqDist(brown.words(categories="news")) cfd = nltk.ConditionalFreqDist(brown.tagged_words(categories="news"))##############################################python2和3的区别#########most_freq_words = fd.most_common(100) likely_tags = dict((word,cfd[word].max()) for (word,times) in most_freq_words)#######################################################################baseline_tagger = nltk.UnigramTagger(model=likely_tags,backoff=nltk.DefaultTagger('NN')) baseline_tagger.evaluate(brown_tagged_sents)
N-gram標註基礎的一元標註器
一元標註器的行為與尋找標註器很相似,建立一元標註器的技術,為訓練。
這裡我們的標註器只是記憶訓練集,而不是建立一般模型,那麼吻合很好,但是不能推廣到新文本。
size = int(len(brown_tagged_sents)*0.9) train_sents = brown_tagged_sents[:size] test_sents = brown_tagged_sents[size+1:] unigram_tagger = nltk.UnigramTagger(train_sents) unigram_tagger.evaluate(test_sents)一般的N-gram標註器
N元標註器,就是檢索index= n 的word,並且檢索n-N< ;=indexnltk.UnigramTagger()組合標註器,自帶的二元標註器為:
nltk.BigramTagger()用法一致。
很多時候,覆蓋範圍更廣的演算法比精度更高的演算法更有用。利用backoff
指明
回退標註器,來實現標註器的組合。而參數cutoff明確宣告為int型,則會自動丟棄只出現1-n次的上下文。
t0 = nltk.DefaultTagger('NN') t1 = nltk.UnigramTagger(train_sents,backoff=t0) t2 = nltk.BigramTagger(train_sents,backoff=t1) t2.evaluate(test_sents)可以發現,和原來比較之後,精確度明顯提高跨句子邊界標註
對於句首的單詞,沒有前n個單字。解決方法:透過已標記的tagged_sents來訓練標註器。
基於轉換的標註:Brill標註器
#較上面的都優秀。實現的想法:以大筆化開始,然後修復細節,一點點進行細緻改變。不僅佔用記憶體小,而且關聯上下文,並且根據問題的變小,即時修正錯誤,而不是一成不變的。當然,在python3和python2的呼叫有所不同。
from nltk.tag import brill brill.nltkdemo18plus() brill.nltkdemo18()
以上是NLTK學習:分類與標註詞彙的詳細內容。更多資訊請關注PHP中文網其他相關文章!

2小時內可以學會Python的基本編程概念和技能。 1.學習變量和數據類型,2.掌握控制流(條件語句和循環),3.理解函數的定義和使用,4.通過簡單示例和代碼片段快速上手Python編程。

Python在web開發、數據科學、機器學習、自動化和腳本編寫等領域有廣泛應用。 1)在web開發中,Django和Flask框架簡化了開發過程。 2)數據科學和機器學習領域,NumPy、Pandas、Scikit-learn和TensorFlow庫提供了強大支持。 3)自動化和腳本編寫方面,Python適用於自動化測試和系統管理等任務。

兩小時內可以學到Python的基礎知識。 1.學習變量和數據類型,2.掌握控制結構如if語句和循環,3.了解函數的定義和使用。這些將幫助你開始編寫簡單的Python程序。

如何在10小時內教計算機小白編程基礎?如果你只有10個小時來教計算機小白一些編程知識,你會選擇教些什麼�...

使用FiddlerEverywhere進行中間人讀取時如何避免被檢測到當你使用FiddlerEverywhere...

Python3.6環境下加載Pickle文件報錯:ModuleNotFoundError:Nomodulenamed...

如何解決jieba分詞在景區評論分析中的問題?當我們在進行景區評論分析時,往往會使用jieba分詞工具來處理文�...

如何使用正則表達式匹配到第一個閉合標籤就停止?在處理HTML或其他標記語言時,常常需要使用正則表達式來�...


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

SublimeText3漢化版
中文版,非常好用

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

禪工作室 13.0.1
強大的PHP整合開發環境