精通Python自然語言處理 1 :字串操作
程式碼 https://github.com/PacktPublishing/Mastering-Natural-Language-Processing-with-Python
1、切分
將文字分割成更小的並被稱作識別符號的模組的過程。sent_tokenize函式使用了NLTK包的一個叫PunktSentenceTokenizer類的例項。基於那些可以標記句子開始和結束的字母和標記符號,這個歌例項已經被訓練用於對不同的歐洲語言執行切分。
import nltk
text=" Welcom readers. I hope you find it interesting. Please do reply."
from nltk.tokenize import sent_tokenize
sent_tokenize(text)
Out[4]: [' Welcom readers.', 'I hope you find it interesting.', 'Please do reply.']
切分大批量的句子,可以載入PunktSentenceTokenizer並使用其tokenize()函式,也可載入其它語言
tokenizer=nltk.data.load('tokenizers/punkt/english.pickle') # french.pickle
tokenizer.tokenize(text)
將句子切分為單詞,使用word_tokenize()函式,其使用NLTK包的一個叫TreebankWordTokenizer類的例項
text=nltk.word_tokenize("I hope you find it interesting.")
print(text)
['I', 'hope', 'you', 'find', 'it', 'interesting', '.']
通過分離縮略詞來實現切分
text=nltk.word_tokenize("Don't hesitate to ask questions")
print(text)
['Do', "n't", 'hesitate', 'to', 'ask', 'questions']
還可以通過載入TreebankWordTokenizer,然後呼叫tokenzie()函式來完成。from nltk.tokenize import TreebankWordTokenizer
tokenizer = TreebankWordTokenizer()
tokenizer.tokenize("Have a nice day. I hope you find the book interesting")
Out[14]:
['Have',
'a',
'nice',
'day.',
...
另一個通過分離標點來切分的PunktWordTokenizer,還有一個分詞器是WordPunctTokenizer,通過將標點轉化為一個全新的識別符號來實現切分:
from nltk.tokenize import WordPunctTokenizer
tokenizer = WordPunctTokenizer()
tokenizer.tokenize("Don't hesitate to ask questions")
Out[17]: ['Don', "'", 't', 'hesitate', 'to', 'ask', 'questions']
分詞器的繼承樹:
使用正規表示式實現切分:P20,通過匹配單詞與匹配空格或間隔的方法
from nltk.tokenize import RegexpTokenizer
tokenizer=RegexpTokenizer("[\w]+")
tokenizer.tokenize("Don't hesitate to ask questions")
Out[20]: ['Don', 't', 'hesitate', 'to', 'ask', 'questions']
2、標準化
主要涉及消除標點符號、轉為大寫或小寫、數字轉換成單詞、擴充套件縮略詞、文字的規範化等操作
消除標點
文字的大小寫轉換:
處理停止詞:需要被過濾掉的詞,因為這些詞對理解句子的整體意思沒有多大的意義。搜尋引擎通過去除停止詞來工作,以便縮小搜尋範圍。可從nltk_data/corpora/stopwords中訪問停止詞列表
from nltk.corpus import stopwords
stops = set(stopwords.words('english'))
words = ["Don't", "hesitate", "to", "ask", "questions"]
[word for word in words if word not in stops]
Out[28]: ["Don't", 'hesitate', 'ask', 'questions']
3、替換和校正識別符號
使用正規表示式替換單詞:
用單詞的同義詞替換
4、在文字上應用Zipf定律
Zipf定律指出,文字中識別符號出現的頻率與其在排序列表中的排名或位置成反比。該定律描述了識別符號在語言中是如何分佈的:一些識別符號非常頻繁地出現,另一些出現頻率較低,還有一些基本上不出現。
import nltk
from nltk.corpus import gutenberg
from nltk.probability import FreqDist
import matplotlib
import matplotlib.pyplot as plt
matplotlib.use('TkAgg')
fd = FreqDist()
for text in gutenberg.fileids():
for word in gutenberg.words(text):
fd[word] += 1
ranks = []
freqs = []
for rank, word in enumerate(fd):
ranks.append(rank+1)
freqs.append(fd[word])
plt.loglog(ranks, freqs)
plt.xlabel('frequency(f)', fontsize=14, fontweight='bold')
plt.ylabel('rank(r)', fontsize=14, fontweight='bold')
plt.grid(True)
plt.show()
5、相似性度量
ntlk.metrics包用於提供各種評估或相似性度量
使用編輯距離演算法:
使用Jaccard係數
使用Smith Waterman距離
其它字串相似性度量
相關文章
- Python自然語言處理 1 語言處理與PythonPython自然語言處理
- 精通Python自然語言處理 2 :統計語言建模Python自然語言處理
- 精通Python自然語言處理 3 :形態學Python自然語言處理
- Python自然語言處理Python自然語言處理
- Python自然語言處理 3 處理原始文字Python自然語言處理
- Python自然語言處理實戰(1):NLP基礎Python自然語言處理
- NLP1 —— Python自然語言處理環境搭建Python自然語言處理
- 精通Python自然語言處理 4 :詞性標註--單詞識別Python自然語言處理詞性標註
- 自然語言處理(NLP)自然語言處理
- 自然語言處理(NLP)系列(一)——自然語言理解(NLU)自然語言處理
- 自然語言處理(NLP)概述自然語言處理
- 自然語言處理NLP(四)自然語言處理
- 自然語言處理新天地(之三[1]) (轉)自然語言處理
- hanlp自然語言處理包的基本使用--pythonHanLP自然語言處理Python
- 《Python自然語言處理實戰》連結表Python自然語言處理
- Python 自然語言處理(NLP)工具庫彙總Python自然語言處理
- HanLP 自然語言處理 for nodejsHanLP自然語言處理NodeJS
- [譯] 自然語言處理真是有趣!自然語言處理
- 自然語言處理:分詞方法自然語言處理分詞
- 自然語言處理與分析(one)自然語言處理
- 中國語文(自然語言處理)作業自然語言處理
- Python自然語言處理工具Python自然語言處理
- Python自然語言處理入門Python自然語言處理
- 史丹佛自然語言處理習題課1——緒論自然語言處理
- Python自然語言處理 6 學習分類文字Python自然語言處理
- 自然語言處理之jieba分詞自然語言處理Jieba分詞
- 人工智慧 (06) 自然語言處理人工智慧自然語言處理
- 自然語言處理的最佳實踐自然語言處理
- 機器學習工作坊 - 自然語言處理機器學習自然語言處理
- 配置Hanlp自然語言處理進階HanLP自然語言處理
- 自然語言處理NLP快速入門自然語言處理
- 自然語言處理(NLP)入門指南自然語言處理
- 使用Mahout實現自然語言處理自然語言處理
- 自然語言處理與情緒智慧自然語言處理
- 使用 Python+spaCy 進行簡易自然語言處理Python自然語言處理
- 基於 Python 的簡單自然語言處理實踐Python自然語言處理
- 如何用Python處理自然語言?(Spacy與Word Embedding)Python
- Python 自然語言處理(基於jieba分詞和NLTK)Python自然語言處理Jieba分詞