《用Python進行自然語言處理》程式碼筆記(五):第七章:從文字提取資訊
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Author : Peidong # @Site : # @File : eg7.py # @Software: PyCharm """ 從文字提取資訊 """ import nltk # 讀取語料庫的“訓練”部分的100 個句子的例子 from nltk.corpus import conll2000 print(conll2000.chunked_sents('train.txt')[99]) # # 使用chunk_types 引數選擇 print(conll2000.chunked_sents('train.txt', chunk_types=['NP'])[99]) # 訪問一個已分塊語料,可以評估分塊器 cp = nltk.RegexpParser("") test_sents = conll2000.chunked_sents('test.txt', chunk_types=['NP']) print(cp.evaluate(test_sents)) # 嘗試一個初級的正則表示式分塊器,查詢以名詞短語標記的特徵字母(如CD、DT 和JJ)開頭的標記。 grammar = r"NP: {<[CDJNP].*>+}" cp = nltk.RegexpParser(grammar) test_sents = conll2000.chunked_sents('test.txt', chunk_types=['NP']) print(cp.evaluate(test_sents)) # 使用unigram 標註器對名詞短語分塊。 class UnigramChunker(nltk.ChunkParserI): def __init__(self, train_sents): train_data = [[(t,c) for w,t,c in nltk.chunk.tree2conlltags(sent)] for sent in train_sents] self.tagger = nltk.UnigramTagger(train_data) defparse(self, sentence): pos_tags = [pos for (word,pos) in sentence] tagged_pos_tags = self.tagger.tag(pos_tags) chunktags = [chunktag for (pos, chunktag) in tagged_pos_tags] conlltags = [(word, pos, chunktag) for ((word,pos),chunktag) in zip(sentence, chunktags)] return nltk.chunk.conlltags2tree(conlltags) # # 可以使用CoNLL2000 分塊語料庫訓練它,並測試其效能 test_sents = conll2000.chunked_sents('test.txt', chunk_types=['NP']) train_sents = conll2000.chunked_sents('train.txt', chunk_types=['NP']) unigram_chunker = UnigramChunker(train_sents) print(unigram_chunker.evaluate(test_sents)) postags = sorted(set(pos for sent in train_sents for (word,pos) in sent.leaves())) print(unigram_chunker.tagger.tag(postags)) # 使用連續分類器對名詞短語分塊 class ConsecutiveNPChunkTagger(nltk.TaggerI): def __init__(self, train_sents): train_set = [] for tagged_sent in train_sents: untagged_sent = nltk.tag.untag(tagged_sent) history = [] for i, (word, tag) in enumerate(tagged_sent): featureset = npchunk_features(untagged_sent, i, history) train_set.append( (featureset, tag) ) history.append(tag) self.classifier = nltk.MaxentClassifier.train(train_set, algorithm='megam', trace=0) def tag(self, sentence): history = [] for i, word in enumerate(sentence): featureset = npchunk_features(sentence, i, history) tag = self.classifier.classify(featureset) history.append(tag) return zip(sentence, history) class ConsecutiveNPChunker(nltk.ChunkParserI): def __init__(self, train_sents): tagged_sents = [[((w, t), c) for (w, t, c) in nltk.chunk.tree2conlltags(sent)] for sent in train_sents] self.tagger = ConsecutiveNPChunkTagger(tagged_sents) def parse(self, sentence): tagged_sents = self.tagger.tag(sentence) conlltags = [(w, t, c) for ((w, t), c) in tagged_sents] return nltk.chunk.conlltags2tree(conlltags) # # 定義一個簡單的特徵提取器,它只是提供了當前識別符號的詞性標記 def npchunk_features(sentence, i, history): word, pos = sentence[i] return {"pos": pos} train_sents = conll2000.chunked_sents('train.txt', chunk_types=['NP']) chunker = ConsecutiveNPChunker(train_sents) print(chunker.evaluate(test_sents)) # 一個分塊器,處理NP,PP,VP 和S grammar = r""" NP: {<DT|JJ|NN.*>+} # Chunk sequences of DT, JJ, NN PP: {<IN><NP>} # Chunk prepositions followed by NP VP: {<VB.*><NP|PP|CLAUSE>+$} # Chunk verbs and their arguments CLAUSE: {<NP><VP>} # Chunk NP, VP """ cp = nltk.RegexpParser(grammar) sentence = [("Mary", "NN"), ("saw", "VBD"), ("the", "DT"), ("cat", "NN"), ("sit", "VB"), ("on", "IN"), ("the", "DT"), ("mat", "NN")] print(cp.parse(sentence)) sentence = [("John", "NNP"), ("thinks", "VBZ"), ("Mary", "NN"), ("saw", "VBD"), ("the", "DT"), ("cat", "NN"), ("sit", "VB"), ("on", "IN"), ("the", "DT"), ("mat", "NN")] print(cp.parse(sentence)) cp = nltk.RegexpParser(grammar, loop=2) print(cp.parse(sentence)) # 在NLTK 中,建立了一棵樹,通過給一個節點新增標籤和一個孩子連結串列: # tree1 = nltk.Tree('NP', ['Alice']) # print(tree1) # tree2 = nltk.Tree('NP', ['the', 'rabbit']) # print(tree2) # tree3 = nltk.Tree('VP', ['chased', tree2]) # tree4 = nltk.Tree('S', [tree1, tree3]) # print(tree4) # print(tree4[1]) # print(tree4.leaves()) # print(tree4[1].node) # print(tree4[1][1][1]) # 遞迴函式遍歷樹 # def traverse(t): # try: # t.node # except AttributeError: # print(t,) # else: # # Now we know that t.node is defined # print ('(', t.node,) # for child in t: # traverse(child) # print (')',) # # t = nltk.Tree('(S (NP Alice) (VP chased (NP the rabbit)))') # print(traverse(t)) sent = nltk.corpus.treebank.tagged_sents()[22] print(nltk.ne_chunk(sent, binary=True)) print(nltk.ne_chunk(sent))
相關推薦
用Python進行自然語言處理學習筆記一
NLTK是一個高效的Python構建的平臺,用來處理人類自然語言資料。它提供了易於使用的介面,通過這些介面可以訪問超過50個語料庫和詞彙資源(如WordNet),還有一套用於分類、標記化、詞幹標記、解析和語義推理的文字處理庫,以及工業級NLP庫的封裝器和一個活躍的討論論壇。
自然語言處理 學習筆記(五)
個人學習nlp筆記:學習材料CS124、COSC572和《Speech and Language Processing》第三版 自然語言處理 學習筆記(五) 1.向量語義(Vector Semantics) 1.1詞彙語義 1.2 語義
《用Python進行自然語言處理》程式碼筆記(五):第七章:從文字提取資訊
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Author : Peidong # @Site : # @File : eg7.py # @Software: PyCharm """ 從文字提取資訊 """
(初學者)用Python進行自然語言處理筆記一
Python程式設計 連結串列list 在Python中連結串列的表示為:[](這是一個空連結串列),或者[‘A’,’B’].list中的元素是允許重複的! ##########有關列表的基本操作############## #定義一個空連結串列 li
用Python進行自然語言處理-筆記
#!/usr/bin/env python # -*- coding: utf-8 -*- from nltk.book import * # 查詢特定詞語上下文 text1.concordance("monstrous") # 相關詞查詢 text1.similar(
《用Python進行自然語言處理》下載
2018年11月01日 13:37:53 qq_43576475 閱讀數:3 標籤: 程式設計 資料
《用Python進行自然語言處理》第 1 章 語言處理與 Python
1. 將簡單的程式與大量的文字結合起來,我們能實現什麼?2. 我們如何能自動提取概括文字風格和內容的關鍵詞和短語?3. Python 程式語言為上述工作提供了哪些工具和技術?4. 自然語言處理中的有哪些有趣的挑戰?1.1 語言計算:文字和單詞python入門NLTK 入門fr
用python進行自然語言處理 第一章練習題答案
搜了一下好像沒有官方答案 自己做完並且結合了網上的一版答案 最終將結果貼在這裡 希望朋友們來批評指正. ○嘗試使用 Python 直譯器作為一個計算器,輸入表示式,如 12/(4+1)。 答: 12/(4+1) 注意/ 在python中指的是整除 ○
python自然語言處理-學習筆記(二)
在第二章中,主要介紹了各個預料庫的使用,這裡不再贅述,對於預料庫的操作,之前書中都提到過。這裡只說一下一個問題,在inaugural預料庫中,測試輸出條件分佈圖的時候,他的程式碼裡有個問題,我按照書中寫的方法,得到的結果如下: >>> cfd
自然語言處理 學習筆記(四)
個人學習nlp筆記:學習材料CS124、COSC572和《Speech and Language Processing》第三版 自然語言處理 學習筆記(四) 1. 資訊檢索 2. 詞彙-文字關聯矩陣 3.倒排索引(Inverted Index)
自然語言處理 學習筆記(三)
個人學習nlp筆記:學習材料CS124、COSC572和《Speech and Language Processing》第三版 自然語言處理 學習筆記(三) 1.樸素貝葉斯 1.1 樸素貝葉斯推導 1.2 樸素貝葉斯訓練 1.3樸素
自然語言處理 學習筆記(二)
個人學習nlp筆記:學習材料CS124、COSC572和《Speech and Language Processing》第三版 自然語言處理 學習筆記(二) 1.語言模型(language modeling) 1.1.概率語言模型(N-gram
自然語言處理 學習筆記(一)
個人學習nlp筆記:學習材料CS124、COSC572和《Speech and Language Processing》第三版 自然語言處理 學習筆記(一) 1.正則表示式和文字標準化 1.1正則表示式 1.2文字標準化(text no
跳躍NLP曲線:自然語言處理研究綜述(五)(翻譯)
6. 展望語義曲線 敘事理解和生成是推理,決策和“意識形成”的核心。除了作為人與人交流的關鍵部分之外,敘事也是構建現實和進行規劃的手段。解讀人類大腦如何生成和處理敘事可能最終導致我們真正理解和解釋人類的智慧和意識。計算機建模是研究敘事理解的有效方法。在知識表達
《使用Python進行自然語言處理》學習筆記五
第三章 加工原料文字 3.1 從網路和硬碟訪問文字 1 電子書 古騰堡專案的其它文字可以線上獲得, 整個過程大概需要幾十秒(實驗室網路不行是硬傷) 使用raw()可以得到原始的字串。但是raw得到的資料絕對不是我們能直接拿去分析的,還要經過一些預處理。我們要將字串分解為詞
《使用Python進行自然語言處理(Nltk)》2
import nltk from nltk.corpus import * '''1、古騰堡語料庫''' gutenberg.fileids() #所有古騰堡語料庫中的文字 emma = nltk.corpus.gutenberg.words('austen-e
跳躍NLP曲線:自然語言處理研究綜述(三)(翻譯)
3. 重疊NLP曲線 隨著網際網路時代的到來,文明經歷了深刻的影響,我們現在比以往任何時候都經歷的快很多。即使是適應、發展和創新技術,也會讓人感到恍惚,即淘汰就在眼前。特別是NLP研究在過去15年中並沒有像其它技術那樣發展。 雖然NLP研究在執行人工智慧行為
《Python學習手冊》學習筆記(4)之第4章介紹Python物件型別(關鍵詞:程式語言/Python)
第4章 介紹Python物件型別 寫在開頭的讀者筆記 值得一讀的小節 1.“為什麼使用內建型別” - “Python的核心資料型別”,主要學到了: Python是強型別語言,你只能對一個物件進行適合該型別的有效操作。 一旦建立了一個物件,它就和
自然語言處理期末複習(3)-(5)模型與句法分析
第三部分 隱馬爾科夫模型與詞類標註1.定義:如果給定一個觀察序列(不同顏色的小球序列),不能直接確定狀態轉換序列(罈子的序列),因為狀態轉移過程被隱藏起來了。所以這類隨機過程被稱為隱馬爾科夫過程。2.詞類標註的方法:(1)基於規則的詞類標註:查字典,給詞標記所有可能,逐步刪除
卜若的程式碼筆記系列-Web系列-SpringBoot-第三章:Maven(主要是idea裡面的,但是maven的普適eclipse等ide)-3202
1.配置jdk 要點:預設安裝(除非你是大佬),配置java_home 配置path: 2.配置maven 3.配置IDEA IDEA去官網上下載一下 http://www.jetbrains.com/idea/download/#secti