前面兩篇已經基本上算是完成了預處理部分的分享了,這裡開始分享一些文字處理。語言結構是非常複雜的,需要按照其不同的處理層次來對它進行描述。
這裡會分享常見的文字結構,介紹結構之間的區別和用法。同樣我會試著通過**的方式以例項展示其處理過程。
概念:
1. 為什麼需要進行文字解析
回答這個問題的時候可以先回想一下當初我們學習語言時是怎樣的乙個過程,首先我們先學一些單詞,
2. 兩種解析方式:基於規則和基於概念。第一種是基於規則和語法,該方法將語法概念編撰成語法規則手冊,形成基於表示式的解析器,這種方式是一種比較舊的思想。第二種是運用概率模型來學習規則和語法,使用所觀測到的相關語言特徵出現概率,從而形成乙個基於概率的解析器。
3. 什麼是淺解析和深解析
淺解析(shallow parsing):面向給定文字,對其語法資訊部分所進行的有限解析任務。
深解析(deep parsing):是一種相對淺解析更為複雜的應用,一般來說比較適合於對話系統和文字綜述這樣的應用。
解析器的種類:
遞迴下降解析器
該解析器從左到右讀取輸入流中的資訊,所以它會試圖去驗證其語法的正確性。該解析器的基本操作是從輸入流中讀取字元,然後將它們與終端所輸入的語法規則說明進行匹配。
移位-歸約解析器
這是一種自下而上的解析器,主要是通過尋找乙個單詞和短語序列,它們一方面對應著語法生成器的右側,另一方面則會用生成器左側的內容對其進行替換,直到歸簡出完整的句子為止。
圖表解析器
這是運用了動態規劃的演算法設計將中間的結果儲存下來,然後再適當的時候重新啟用它們,以便顯著的提高效率。
正規表示式解析器
由名字就可以猜出它的使用方式,根據預定義的語法形式在完成了詞性標註的字串之上構建而成的。該解析器將使用正規表示式來解析給定的句子,並為它們生成相應的解析樹。
import nltk
from nltk.chunk.regexp import *
chunk_rules = chunkrule("<.*>+", "chunk everything")
reg_parser = regexpparser('''
np:
p: {}
v: {}
pp: {}
vp:
''')
test_sent = "mr. obama played a big role in the health insurance bill."
test_sent_pos = nltk.pos_tag(nltk.word_tokenize(test_sent))
paresed_out = reg_parser.parse(test_sent_pos)
print(str(paresed_out))
依賴文字解析
依賴文字解析是現在比較流行的文字解析機制,它主要是將各個語法單元用定向鏈路串聯起來。這些鏈路成為
from nltk.parse.stanford import stanfordparser
english_parser = stanfordparser('standford-parser.jar', 'standfordparser-3.8.0-models.jar')
english_parser.raw_parse_sents('this is the english parser test.')
抱歉這個沒有跑通,書看到這裡感覺這些方法都太落後了,接下來估計再整理一篇nltk的就放棄nltk了,雖然學到了一些文字挖掘的基本流程,但是方法太落後了將來不好找工作,所以放棄了哈。 自然語言處理入門
1 首先,將原文本拆分為句子,在每個句子中過濾掉停用詞 可以不選 並只保留指定詞性的單詞,由此可以得到句子和單詞的集合。2 每個單詞作為pagerank中的乙個節點。設視窗大小為k,假設乙個句子所組成的單詞可以表示為w1,w2,w3,wn.則w1,w2,wk w2,w3,wk 1 w3,w4,wk ...
如何入門自然語言處理
直接做文字分類這個專案,具體的思路很簡單。把原始文字變成向量,然後呼叫sklearn庫里的分類演算法,就可以實現文字分類了!如何把文字轉換為文字向量呢?看這篇文章即可,手把手地教你把中文文字變成向量 附 盡量地去理解 的實現思路,以後遇到類似問題能不能轉換成相應的資料格式,繼續用這些 操作。完整的實...
自然語言處理如何入門
ps 筆者會持續更新 俗話說得好 做research或者學習某個技能最重要的是要對自己的research要非常熟悉 3mins讓別人聽懂你做的這玩意兒是個啥,contribution在 讓別人覺得你做的東西有意義 自然語言包括許多分支,主要有 機器翻譯 自動文摘 資訊檢索 文件分類 問答系統 資訊過...