理解和使用自然語言處理之終極指南(Python編碼)12k

理解和使用自然語言處理之終極指南(Python編碼)(經典收藏版12k字,附數據簡化籌員2月17日Fri新聞)

秦隴紀10譯編

12k字理解和使用自然語言處理之終極指南(Python編碼)7k字;附數據簡化DataSimp籌收技術簡歷414字、2月17日Fri新聞四則4k字。歡迎加入共建「數據簡化DataSimp」學會及社區,關注、收藏、轉發新媒體「數據簡化DataSimp、科學Sciences」微信號、頭條號,轉載請寫出處:秦隴紀10「數據簡化DataSimp/科學Sciences」公眾號、頭條號譯編,投稿[email protected]

目錄

理解和使用自然語言處理之終極指南(Python編碼)(7.4k字)

A.數據簡化DataSimp籌備收簡歷(414字)

B.2017年2月17日周(農曆丁酉雞年正月廿一)新聞四則彙編(4.8k字)

理解和使用自然語言處理之終極指南(Python編碼)

秦隴紀10譯編;來源:仕瓦姆·邦薩爾(Shivam Bansal),2017年1月12日,威提亞分析學


目錄表Table of Contents

1. Introduction to NLP 自然語言處理介紹

2. Text Preprocessing文本預處理

o Noise Removal 雜訊去除

o Lexicon Normalization 辭彙規範化

§ Lemmatization 詞變體歸類

§ Stemming 詞幹提取

o Object Standardization 對象規範化

3. Text to Features (Feature Engineering on text data)文本到特徵(文本數據之特徵工程)

o Syntactical Parsing 句法解析

§ Dependency Grammar 依存語法

§ Part of Speech Tagging 詞性標註

o Entity Parsing 實體解析

§ Phrase Detection 短語檢測

§ Named Entity Recognition 命名實體識別

§ Topic Modelling 主題造型

§ N-Grams N元連續模型

o Statistical features 統計特徵

§ TF – IDF 詞頻-逆文檔詞頻

§ Frequency / Density Features 頻率/密度特徵

§ Readability Features 可讀性特徵

o Word Embeddings 字嵌入

4. Important tasks of NLP自然語言處理NLP的重要任務

o Text Classification 文本分類

o Text Matching 文本匹配

§ Levenshtein Distance 萊文斯坦距離

§ Phonetic Matching 語音匹配

§ Flexible String Matching 柔性字元串匹配

o Coreference Resolution 共指消解

o Other Problems 其他問題

5. Important NLP libraries 重要NLP庫

據業內人士估計,只有21%可用數據以結構化形式存在。數據產生,正如我們所說的,來自於我們的推特、WhatsApp和其他各種交流活動中發送的信息。大多數這些數據存在於文本的形式,是高度非結構化的性質。一些臭名昭著的例子包括——在社交媒體上的推特/帖子、用戶到用戶的聊天對話、新聞、博客和文章、產品或服務審查和醫療部門裡的病人記錄。最近的一些例子包括聊天機器人和其他聲音驅動的機器人程序。

儘管具有高維數據,但其呈現的信息是不可以直接訪問的,除非它被手動處理(讀取和理解)或由自動化系統分析。為了從文本數據中產生明顯的和可操作的洞察/見解,熟悉自然語言處理(NLP)的技術和原則顯得非常重要。那麼,如果你打算今年創建聊天機器人,或者你想使用非結構化文本的力量,本指南是正確的起點。本指南挖掘自然語言處理的概念、技術與實現。文章的目的是教會自然語言處理的概念,並將其應用於實際數據集。

1. Introduction to Natural Language Processing 自然語言處理介紹

NLP是數據科學的一個分支,包括智能和高效地從文本數據中分析、理解和導出信息的系統流程。通過NLP及其組成部分,企業可以組織海量文本數據塊、執行許多自動化任務、並解決廣泛問題,如自動摘要、機器翻譯、命名實體識別、關係抽取、情感分析、語音識別、主題分割等。

在進一步研究之前,我想解釋一下文章中使用的一些術語:

· 標記化——轉換文本到標記體的過程;

· 標記體——文本中存在的單詞或實體;

· 文本對象——一個句子或一個短語或一個詞或一篇文章

安裝NLTK及其數據的步驟(使用Python語言及環境):

安裝Pip:在終端中運行:

sudo easy_install pip

安裝NLTK:在終端中運行:

sudo pip install -U nltk

下載NLTK數據:運行Python shell(在終端)和寫下面的代碼:

``` import nltk nltk.download()```

按照屏幕上的指令下載所需的包或集合。其他庫可以直接使用Pip安裝。

2. Text Preprocessing文本預處理

因此,文本是所有可用數據的最具非結構化的形式,存在於其中的各種類型的雜訊,並且沒有預處理的數據是不容易分析的。文本清理和標準化的全過程,是一個去除其雜訊和稱為文本預處理的分析準備工作。

它主要由三個步驟組成:

· Noise Removal 雜訊去除

· Lexicon Normalization 辭彙規範化

· Object Standardization 對象標準化

下圖顯示了文本預處理(清潔)流水線的體系結構。


2.1 Noise Removal 雜訊去除

任何與數據上下文和最終輸出無關的文本片段,都可以指定為雜訊。例如——語言停用詞(語言常用詞is/am/the/of/in等),URL或鏈接,社會媒體實體(提示、哈希標籤),標點符號和特定行業用詞。此步驟處理移除文本中存在的所有類型雜訊實體。

去除雜訊的一般方法是準備一個雜訊實體字典,並通過標記符號(或文字)來迭代文本對象,消除這些雜訊字典呈現出的標記符號。

以下是實現相同目的Python代碼。

```

# Sample code to remove noisy words from a text

noise_list = ["is", "a", "this", "..."]

def _remove_noise(input_text):

words = input_text.split()

noise_free_words = [word for word in words if word not in noise_list]

noise_free_text = " ".join(noise_free_words)

return noise_free_text

_remove_noise("this is a sample text")

>>> "sample text"

```

另一種方法是在處理特殊雜訊模式時使用正則表達式。之前的一篇文章中,我們詳細解釋了正則表達式。以下的Python代碼從輸入文本中移除了一個正則表達式模式:

```

# Sample code to remove a regex pattern

import re

def _remove_regex(input_text, regex_pattern):

urls = re.finditer(regex_pattern, input_text)

for i in urls:

input_text = re.sub(i.group().strip(), '', input_text)

return input_text

regex_pattern = "#[A-Za-z0-9\w]*"

_remove_regex("remove this #hashtag from analytics vidhya", regex_pattern)

>>> "remove this from analytics vidhya"

```

2.2 Lexicon Normalization 辭彙規範化

另一種文本式雜訊是關於單個詞所表現的多重表徵

例如:「玩」、「玩家」,「玩過」,第三人稱的「玩」和「正在玩」(play, player, played, plays and playing)這些詞是單詞「玩」的不同變化,儘管他們的意思是不同的,但內容都是相似的。這個步驟是把一個詞的所有差異轉換成它們的標準化形式(也稱為lemma引理)。規範化是文本特徵工程的關鍵步驟,因為它轉換的高維特徵(N維度不同特徵)到低維空間(1個特徵),是任何ML模型的一種理想解。

最常見的辭彙規範化做法是:

· 詞幹提取(Stemming):詞幹提取是一種基本的基於規則的從一個詞剝離後綴的過程(後綴ing, ly, es, s等)。

· 詞變體歸類(Lemmatization):詞變體歸類,從另一方面,是一個有組織且有步驟獲得這個詞的詞根形式的過程,即辭彙用法(單詞的詞典重要性)和形態邏輯分析(辭彙結構和語法關係)。

下面的示例代碼是用Python主流庫NLTK執行的詞變體歸類(Lemmatization)和詞幹提取(Stemming)。

```

from nltk.stem.wordnet import WordNetLemmatizer

lem = WordNetLemmatizer()

from nltk.stem.porter import PorterStemmer

stem = PorterStemmer()

word = "multiplying"

lem.lemmatize(word, "v")

>> "multiply"

stem.stem(word)

>> "multipli"

```

2.3 Object Standardization 對象標準化

文本數據通常包含一些任何標準語義字典中不存在的單詞或短語。這些碎片是搜索引擎和模型不能識別的。

這方面的一些例子是——首字母縮略詞語、單詞附屬哈希標籤和口語俚語。藉助正則表達式和手工編寫的數據字典,可以找到這種類型的雜訊,下面的代碼使用一個字典查找法從文本中代替社交媒體的俚語。

```

lookup_dict = {'rt':'Retweet', 'dm':'direct message', "awsm" : "awesome", "luv" :"love", "..."}

def _lookup_words(input_text):

words = input_text.split()

new_words = []

for word in words:

if word.lower() in lookup_dict:

word = lookup_dict[word.lower()]

new_words.append(word) new_text = " ".join(new_words)

return new_text

_lookup_words("RT this is a retweeted tweet by Shivam Bansal")

>> "Retweet this is a retweeted tweet by Shivam Bansal"

```

除了討論到目前為止的三個步驟,其他類型的文本預處理包括編碼解碼雜訊、語法檢查器、拼寫校正等。詳細的文本預處理及其方法在秦隴紀專著文章有。

3.Text to Features (Feature Engineering on text data) 文本到特徵(文本數據之特徵工程)

預處理數據做分析,需要將其轉換成特徵。根據使用情況,文本特徵可用配套技術來構建——語義分析、實體/克/基於詞的特徵、統計特徵、字的嵌入。實體/N元連續模型/基於詞的特徵、統計特徵,和單詞嵌入。下面來繼續閱讀,以詳細了解這些技術。

3.1 Syntactic Parsing 句法解析

句法解析涉及句中單詞的語法和顯示這些單詞間關係的排列方式的分析。依存語法和部分語音標籤是文本句法的重要屬性。

依存樹–句子是由一些單詞縫和在一起組成的。句子中詞語間的關係由基本依存語法決定。依存語法是處理兩個語義項之間的(標記的)非對稱二元關係(單詞)的一類語義文本分析法。每一種關係都可以用三元組(關係、監督、依存)來表示。例如:考慮句子「Bills on ports and immigration were submitted by Senator Brownback, Republican of Kansas.」這些單詞間的關係,可以用下圖所示的樹形表示形式觀察到:


這個樹顯示「submitted」是這個句子的根詞,是由兩個子樹(主體與客體的子樹)相連。每個子樹本身一個諸如(「Bills」 <-> 「ports」 <by> 「proposition」 relation)、(「ports」 <-> 「immigration」 <by> 「conjugation」 relation)關係的依存關係樹

這種類型的樹,採用自上而下的方法遞歸解析時,給出了的語法關係三元組作為輸出——可用於許多NLP問題的特徵,像實體情感分析、演員和實體識別和文本分類。Python包組斯坦福CoreNLP(來自Stanford NLP項目組,只有商業許可證版)和NLTK依存語法可以用來產生依存關係樹.

詞性標註Part of Speech tagging–除了語法關係,在一個句子里每個詞也和詞性標籤(POS)(名詞、動詞、形容詞、副詞等)相關聯。POS標籤定義一個詞在句子中的用法和功能。這是賓夕法尼亞大學定義的一個所有可能POS標籤列表。下面的代碼使用NLTK對輸入文本進行詞性標註註釋。(它提供了多種實現方案,默認是感知標記器)

```

from nltk import word_tokenize, pos_tag

text = "I am learning Natural Language Processing on Analytics Vidhya"

tokens = word_tokenize(text)

print pos_tag(tokens)

>>> [('I', 'PRP'), ('am', 'VBP'), ('learning', 'VBG'), ('Natural', 'NNP'),('Language', 'NNP'),

('Processing', 'NNP'), ('on', 'IN'), ('Analytics', 'NNP'),('Vidhya', 'NNP')]

```

詞性標註用於NLP自然語言處理中的許多重要用途:

A.詞義消歧:一些語言辭彙根據其用法有多種含義。例如,在以下兩個句子中:

I. 「Please book my flight for Delhi」

II. 「I am going to read this book in the flight」

「Book」在不同語境使用,這兩種情況下的詞性標註詞不同。句I中,「Book」作為動詞,而II句中它被用作名詞。(Lesk演算法也用於類似目的)

B.提高基於詞的特徵值學習模型在以一個詞為特徵時,學習詞的不同情境,如果詞性標註詞與他們有聯繫,則上下文被保存,從而做出強壯的特徵值。例如:

句子Sentence -「book my flight, I will read this book」

標記詞Tokens – (「book」, 2), (「my」, 1), (「flight」, 1), (「I」, 1), (「will」, 1), (「read」, 1), (「this」, 1)

詞性標註標記詞Tokens with POS – (「book_VB」, 1), (「my_PRP$」, 1), (「flight_NN」, 1), (「I_PRP」, 1), (「will_MD」, 1), (「read_VB」, 1), (「this_DT」, 1), (「book_NN」, 1)

C.標準化和詞變體歸類:POS標籤是詞變體歸類過程的基礎,用於將一個詞轉換成它的基形式(lemma引理)。

D.有效的停用詞去除:POS標籤在高效去除停用詞也有用。

例如,有一些標籤總是定義一個語言的低頻/不重要的單詞。例如: (IN – 「within」, 「upon」, 「except」), (CD – 「one」,」two」, 「hundred」), (MD – 「may」, 「mu st」 etc)。

3.2 Entity Extraction (Entities as features) 實體提取(實體為特徵值)

實體被定義為句子中最重要的句塊--名詞短語、動詞短語或兩者。實體檢測演算法通常是基於規則解析、字典查找、POS標籤、依存句法分析的集成模型。實體檢測的適用性可以在自動聊天機器人、內容分析器和消費者洞察中看見。


主題模型命名實體識別是NLP自然語言處理里兩個主要的實體檢測方法。

A. Named Entity Recognition命名實體識別(NER)

檢測如人名、地名、公司名等命名實體的過程稱為NER。例如:

句子Sentence – Sergey Brin, the manager of Google Inc. is walking in the streets of New York.

命名實體Named Entities – ( 「person」 : 「Sergey Brin」 ), (「org」 : 「Google Inc.」), (「location」 : 「New York」)

一個典型NER模型由三塊組成:

名詞短語識別:這一步涉及使用依存解析和詞性標註從文本中提取所有名詞短語。

短語分類:這是將所有被提取名詞短語劃分為所屬相應類別(位置、名稱等)的分類步驟。谷歌地圖API提供了消除歧義位置的一個好路徑,然後,從DBpedia, wikipedia開放資料庫可以用來識別個人姓名或公司名稱。除此之外,結合來自不同信息源的查找表和詞典可以精確查找。

實體消歧:有時這是可能的,實體的誤判分類的,因此隨之創建分類結果之上的驗證層是有用的。出於此目的可以運用知識圖。流行的知識圖有–谷歌知識圖,IBM沃森和維基百科。

B. Topic Modeling主題模型

主題建模是一個存在於文本語料庫中主題的自動識別過程,它以無監督方式推導出語料庫中的隱含模式。主題被定義為「a repeating pattern of co-occurring terms in a corpus」。醫療保健為主題的一個好的主題模型結果有–「health」, 「doctor」, 「patient」, 「hospital」(「健康」、「醫生」、「病人」、「醫院」),農事為主體則有–「farm」, 「crops」, 「wheat」(「農場」、「莊稼」、「小麥」為話題「農業」)。

隱含狄利克雷分配(LDA)是最受歡迎的主題建模技術,以下是使用LDA實現主題建模的Python代碼。有關其工作和執行的詳細說明,請檢查這裡的完整文章。

```

doc1 = "Sugar is bad to consume. My sister likes to have sugar, but not my father."

doc2 = "My father spends a lot of time driving my sister around to dance practice."

doc3 = "Doctors suggest that driving may cause increased stress and blood pressure."

doc_complete = [doc1, doc2, doc3]

doc_clean = [doc.split() for doc in doc_complete]

import gensim from gensim

import corpora

# Creating the term dictionary of our corpus, where every unique term is assigned an index.

dictionary = corpora.Dictionary(doc_clean)

# Converting list of documents (corpus) into Document Term Matrix using dictionary prepared above.

doc_term_matrix = [dictionary.doc2bow(doc) for doc in doc_clean]

# Creating the object for LDA model using gensim library

Lda = gensim.models.ldamodel.LdaModel

# Running and Training LDA model on the document term matrix

ldamodel = Lda(doc_term_matrix, num_topics=3, id2word = dictionary, passes=50)

# Results

print(ldamodel.print_topics())

```

C. N-Grams as FeaturesN元連續模型N grams作為特徵值

N個單詞在一起的組合被稱為N元連續模型(N grams)。作為特徵值,相比單詞(一元1gram),N元連續模型(n>1)通常包含更多信息。另外,雙單詞元組(n=2)被認為是所有其他元模型更重要的特徵。下面的代碼生成一個文本二元模型實例。

```

def generate_ngrams(text, n):

words = text.split()

output = []

for i in range(len(words)-n+1):

output.append(words[i:i+n])

return output

>>> generate_ngrams('this is a sample text', 2)

# [['this', 'is'], ['is', 'a'], ['a', 'sample'], , ['sample', 'text']]

```

3.3 Statistical Features 統計特徵

文本數據也可以使用本節中描述的幾種技術直接量化成數字:

A. Term Frequency – Inverse Document Frequency 詞頻逆文檔頻率(TF-IDF)

TF-IDF是一種常用的信息檢索問題加權模型。它的目的是不考慮精確排序,在文檔中出現辭彙的基礎上,將文本文件轉化為向量模型。例如 – 如果說有一個N個文本文檔的數據集,在任何文檔「D」,TF和IDF將被定義為 –

Term Frequency (詞頻TF) – TF中「T」的定義是在文檔「D」中詞項「T」的計數

Inverse Document Frequency (逆文檔頻率IDF) – IDF定義為在語料庫中可用總文檔數的對數和包含詞項T的文檔數。

TF IDF (詞頻–逆文檔頻率)TF-IDF公式給出的語料庫(文檔列表)中詞項的一個相對重要性,通過如下公式給出。以下是使用Python語言scikit學習包的代碼,將一個文本轉換為TF-IDF向量:


```

from sklearn.feature_extraction.text import TfidfVectorizer

obj = TfidfVectorizer()

corpus = ['This is sample document.', 'another random document.', 'third sample document text']

X = obj.fit_transform(corpus)

print X

>>>

(0, 1) 0.345205016865

(0, 4) ... 0.444514311537

(2, 1) 0.345205016865

(2, 4) 0.444514311537

```

該模型創建一個辭彙字典,並給每個單詞分配一個索引。輸出的每一行包含一個元組(i,j)和一組文檔i中索引詞j的TF-IDF值

B. Count / Density / Readability Features 計數/密度/可讀性特徵

基於特徵值的計數或密度也可以用於模型和分析。這些功能似乎微不足道,但在學習模型顯示了很大影響。一些特徵值有:單詞數、句子計數、標點符號數和特定行業用詞數。其他測量類型包括如音節數、煙霧指數和易讀性指數等可讀性措施。參考Textstat庫創建這些功能。

3.4 Word Embedding (text vectors) 字嵌入(文本向量)

字嵌入是表示詞為向量的現代方式。字嵌入的目的是通過保留語料庫中的上下文相似度,來重新對高維字特徵定義到低維特徵向量。它們被廣泛應用於深度學習DL模型,如卷積神經網路CNN和遞歸神經網路RNN。

Word2vec和GloVe是創建文本其字嵌入的兩個流行模型。這些模型把文本語料庫作為輸入,併產生字向量作為輸出。

Word2vec模型是由預處理模塊、稱為Continuous Bag of Words的淺層神經網路模型和另一個稱為skip-gram的淺層神經網路模型組成。這些模型被廣泛用於其他NLP問題。它首先構建一個辭彙訓練語料庫,然後學習字嵌入表徵值。下面的代碼使用Gensim包來準備把字嵌入作為向量。

```

from gensim.models import Word2Vec

sentences = [['data', 'science'], ['vidhya', 'science', 'data', 'analytics'],['machine', 'learning'], ['deep', 'learning']]

# train the model on your corpus

model = Word2Vec(sentences, min_count = 1)

print model.similarity('data', 'science')

>>> 0.11222489293

print model['learning']

>>> array([ 0.00459356 0.00303564 -0.00467622 0.00209638, ...])

```

它們可以用來作為ML模型的特徵向量,使用餘弦相似性技術、詞聚類和文本分類技術來測量文本相似性

4. Important tasks of NLP NLP重要任務

本節討論自然語言處理領域中不同的用例和問題

4.1 Text Classification 文本分類

文本分類是NLP經典問題。臭名昭著的例子包括 – 電子郵件垃圾郵件識別、新聞主題分類、情緒分類和搜索引擎驅動的網頁組織。

文本分類通常說是指在一個固定類別中對文本對象(文檔或句子)進行系統分類的一種技術。當數據量太大,尤其是組織化、信息過濾和存儲目的下,它真的很有幫助。

典型的自然語言分類器由兩部分組成:(a)訓練(b)如下圖所示的預測。首先,文本輸入過程和功能創建。然後是機器學習模型,再就是學習這些特徵值和用於對新文本做預測。


這裡是一段使用文本塊庫(建立在NLTK環境之上)的樸素貝葉斯分類器的代碼。

```

from textblob.classifiers import NaiveBayesClassifier as NBC

from textblob import TextBlob

training_corpus = [

('I am exhausted of this work.', 'Class_B'),

("I can't cooperate with this", 'Class_B'),

('He is my badest enemy!', 'Class_B'),

('My management is poor.', 'Class_B'),

('I love this burger.', 'Class_A'),

('This is an brilliant place!', 'Class_A'),

('I feel very good about these dates.', 'Class_A'),

('This is my best work.', 'Class_A'),

("What an awesome view", 'Class_A'),

('I do not like this dish', 'Class_B')]

test_corpus = [

("I am not feeling well today.", 'Class_B'),

("I feel brilliant!", 'Class_A'),

('Gary is a friend of mine.', 'Class_A'),

("I can't believe I'm doing this.", 'Class_B'),

('The date was good.', 'Class_A'), ('I do not enjoy my job', 'Class_B')]

model = NBC(training_corpus)

print(model.classify("Their codes are amazing."))

>>> "Class_A"

print(model.classify("I don't like their computer."))

>>> "Class_B"

print(model.accuracy(test_corpus))

>>> 0.83

```

Scikit.Learn也提供了一個文本分類器的管道框架

```

from sklearn.feature_extraction.text

import TfidfVectorizer from sklearn.metrics

import classification_report

from sklearn import svm

# preparing data for SVM model (using the same training_corpus, test_corpus from naive bayes example)

train_data = []

train_labels = []

for row in training_corpus:

train_data.append(row[0])

train_labels.append(row[1])

test_data = []

test_labels = []

for row in test_corpus:

test_data.append(row[0])

test_labels.append(row[1])

# Create feature vectors

vectorizer = TfidfVectorizer(min_df=4, max_df=0.9)

# Train the feature vectors

train_vectors = vectorizer.fit_transform(train_data)

# Apply model on test data

test_vectors = vectorizer.transform(test_data)

# Perform classification with SVM, kernel=linear

model = svm.SVC(kernel='linear')

model.fit(train_vectors, train_labels)

prediction = model.predict(test_vectors)

>>> ['Class_A' 'Class_A' 'Class_B' 'Class_B' 'Class_A' 'Class_A']

print (classification_report(test_labels, prediction))

```

文本分類模型在嚴重依賴於特徵的質量和數量,而應用任何機器學習模型,包含越來越多的訓練數據總是一個很好的做法。一些提示,秦隴紀將在其他篇文章寫關於如何提高文本分類的準確性。

4.2 Text Matching / Similarity 文本匹配/相似度

NLP的一個重要領域是讓文本對象找相似度的匹配處理。文本匹配的重要應用包括自動拼寫校正、數據去複製(data de-duplication)和基因組分析等。若干文本匹配技術可按需提供。本節詳細介紹了此類重要技術。

A. Levenshtein Distance萊文斯坦距離– 兩個字元串之間的Levenshtein距離被定義為將一個字元串轉換為另一個字元串所需的最小編輯次數,允許的編輯操作有插入、刪除或替換單個字元。以下是高效內存計算的實現。

```

def levenshtein(s1,s2):

if len(s1) > len(s2):

s1,s2 = s2,s1

distances = range(len(s1) + 1)

for index2,char2 in enumerate(s2):

newDistances = [index2+1]

for index1,char1 in enumerate(s1):

if char1 == char2:

newDistances.append(distances[index1])

else:

newDistances.append(1 + min((distances[index1], distances[index1+1], newDistances[-1])))

distances = newDistances

return distances[-1]

print(levenshtein("analyze","analyse"))

```

B. Phonetic Matching 語音匹配– 一個語音匹配演算法使用關鍵字(人名、位置名等)作為輸入,併產生一個字元串來識別一組(大致)發音類似的詞。它在搜索大文本語料庫方面是非常有用的,糾正拼寫錯誤和匹配相關名字。探測法(Soundex)和語音(Metaphone)是用於此目的的兩種主要語音演算法。Python的Fuzzy模塊是用來計算不同詞的模糊字元串(soundex strings),例如–

```

import fuzzy

soundex = fuzzy.Soundex(4)

print soundex('ankit')

>>> 「A523」

print soundex('aunkit')

>>> 「A523」

```

C. Flexible String Matching靈活的字元串匹配– 一個完整的文本匹配系統包括不同演算法,共同流水線地計算各種文本的變化。正則表達式真的有助於完成這個目的。另一些常見技術包括 –字元串精確匹配、詞變體歸類(lemmatized)匹配和緊湊匹配(注意空格、標點符號、俚語等)。

D. Cosine Similarity 餘弦相似度 – 當文本被表示為矢量符號時,廣義餘弦相似度也可以被應用為測量向量相似度。下列代碼將文本轉換為向量(使用詞頻)並應用餘弦相似度提供兩個文本間的貼近度。

```

import math

from collections import Counter

def get_cosine(vec1, vec2):

common = set(vec1.keys()) & set(vec2.keys())

numerator = sum([vec1[x] * vec2[x] for x in common])

sum1 = sum([vec1[x]**2 for x in vec1.keys()])

sum2 = sum([vec2[x]**2 for x in vec2.keys()])

denominator = math.sqrt(sum1) * math.sqrt(sum2)

if not denominator:

return 0.0

else:

return float(numerator) / denominator

def text_to_vector(text):

words = text.split()

return Counter(words)

text1 = 'This is an article on analytics vidhya'

text2 = 'article on analytics vidhya is about natural language processing'

vector1 = text_to_vector(text1)

vector2 = text_to_vector(text2)

cosine = get_cosine(vector1, vector2)

>>> 0.62

```

4.3 Coreference Resolution 指代消解

共指消解是一個在眾多句子里發現有關係鏈接的單詞(或短語)的過程。考慮一個例句:「Donald went to John』s office to see the new table. He looked at it for an hour.」(「唐納德去約翰的辦公室看新桌子。他看了一個小時。」)

人類可以很快發現「he他」指的是Donald唐納德(而不是John約翰),「it它」指的是桌子(而不是John』s office約翰的辦公室)。共指消解是自動完成這項工作的NLP組成部分。它用於文獻綜述、問答和信息抽取。斯坦福CoreNLP提供了一種用於商業用途的Python包。

4.4 Other NLP problems / tasks 其他NLP問題/任務

· Text Summarization自動摘要 – 給出一篇文章或段落,自動總結產生有順序的最重要的和相關的句子。

· Machine Translation機器翻譯 – 通過對現實世界的語法、語義和信息等的處理,自動將文本從一種人類語言翻譯到另一種語言。

· Natural Language Generation and Understanding自然語言生成與理解 – 將信息從計算機資料庫或語義意圖轉換為人類可讀的語言,稱為語言生成。將文本塊轉換成更易於計算機程序操縱的邏輯結構,被稱為語言理解

· Optical Character Recognition光學字元識別 – 給定列印文本呈現出的圖像,確定其對應的文本。

· Document to Information文檔轉信息– 這涉及到呈現在文件(網站、文件、PDF文件和圖像)中的文本數據的解析,來分析和清潔格式。

5. Important Libraries for NLP (python) 自然語言處理NLP重要Python庫

· Scikit-learn: Python中的機器學習;

· Natural Language Toolkit (NLTK): 所有的自然語言處理技術的完整工具包;

· Pattern – 為自然語言處理技術和機器學習提供的一款Web挖掘模塊的工具;

· TextBlob – 頂部構建的易於使用的nlp工具API;

· spaCy – Python和Cython工業級NLP;

· Gensim – 人類主題建模;

· Stanford Core NLP– 斯坦福NLP項目組的NLP服務和包。

End Notes結尾筆記

我希望本教程將幫助您在Python自然語言處理中最大限度地提高效率。我相信這不僅給你基本技術思路,而且也告訴你如何實現一些今天可用的、更複雜的技術。如果你在Python實踐中遇到任何困難,或者你有什麼想法/建議/反饋,請毫無拘束地在下面張貼評論。

本文由blogathon 2獲勝者——仕瓦姆·邦薩爾(Shivam Bansal)貢獻。我們將很快發布blogathon 2競賽的其他兩篇置頂博客。所以,敬請期待!So, Stay Tuned!Learn, compete, hack and get hired!學習、競爭、黑客和得到僱用!

註:原文https://www.analyticsvidhya.com/blog/2017/01/ultimate-guide-to-understand-implement-natural-language-processing-codes-in-python/威提亞分析學Machine Learning欄目文章Ultimate Guide to Understand & Implement Natural Language Processing (with codes in Python)。

(歡迎轉發聲明:秦隴紀10公眾號、頭條號「數據簡化DataSimp」科普文章。)

附錄(4823字)

A.數據簡化DataSimp籌備收簡歷(414字)

北京數據簡化有限責任公司(籌)願景:①行業大數據採集處理分析管理系統,②企事業單位行政人事財物聯網智能OA系統,③數據簡化DataSimp學術組及開源社區(中英雙語),④物聯網大數據底層操作系統(整合Linux開源軟體和通信模塊)。

現重點收集數據分析程序演算法模型研發簡歷,成立前/每季度實習生在中關村集中面試。有意實習半年、工作一年以上的開發人員,請註明學歷和工作簡歷、職務和職業規劃、吃住薪酬預期、個人愛好等事項,投遞郵箱[email protected]主題註明:應聘數據簡化DataSimp合伙人或XX崗位(研發崗參考本蚊及文本分析一文的二級標題)。

1)技術研發部(重點收簡歷):核心的數據分析DA、NLP、DL編程技能,Windows/Linux/Android/iOS平台、OA、App軟體開發基礎;

2)市場客服部(研發部兼職):搜集客戶資料、面見客戶、形成客戶需求分析文檔,跟蹤反饋,面談、電郵、電話、郵寄溝通服務;

3)行政後勤部(合伙人兼職):高級的全系列文檔搜集編輯整理技能,OA軟體界面和操作體驗實驗,公司法律財會物業文書基礎。

詳情落地前發文宣傳。

QinDragon2010@DataSimplification and Sciences, Wechat and Toutiao Public Account, 2017.02.16Thu:

LIFE

Life begins at the end of your comfort zone. -- Neale Donald Walsch

THE DAY

The strength of purpose and the clarity of your vision, along with the tenacity to pursue it, is your underlying driver of success. -- Ragy Tomas

B.2017年2月17日周(農曆丁酉雞年正月廿一)新聞四則彙編(4311字)

附i. 早報,2月17日,星期五:

1、清華取消國際學生筆試引爭議,學者:中國大學需提高實力;

2、圓通回應倒閉說:快件攬派正常 不存在快件延誤等問題;

3、城管統一服裝亮相:藏青色、天空藍色制服,搭配金色標誌;

4、諾基亞擬再產17年前暢銷機3310,網友:舊版還沒用壞;

5、國家林業局:今後「吃野味」將被法律追責;

6、香港連續23年獲評全球最自由經濟體;

7、馬雲辦了家15年學制的私立學校 稱要為中國教育改革做嘗試;

8、全球最佳留學城市 蒙特利爾名列榜首 巴黎、倫敦分別位列第二、第三;

9、大英博物館100件文物陸續抵京 將在國博展出;

10、麗江古城制定準入清單:擬禁止歌舞廳、桑拿按摩;

11、樂百氏桶裝水抽檢不合格 致癌物質比規定超標40%;

12、媒體:國內20億級別富豪2000多位 半數無"高學歷";

【微語】1.不要等到需要,才積累人脈。2.不要等到有時間,才去讀書。3.不要等到身無分文,才想起儲蓄。

附ii.2017年2月17日(農曆雞年正月二十一)周五/早讀分享:

1、【鋼鐵價格暴漲 五部委發文控價】近期鋼材現貨和期貨價格短期內均出現了較快上漲,專家認為主要原因還是金融資本利用去產能進行炒作所致。發改委、工信部、質檢總局、銀監會、證監會發布《關於進一步落實有保有壓政策促進鋼材市場平衡運行的通知》進行控價。

2、【我國籌劃"米"字型產業帶格局】在現有城市群和產業帶的基礎上,形成由"隴海線"、"京廣線"、"濟南-鄭州-重慶"、"太原-鄭州-合肥"發展格局,以此推進東中部地區實現產業聯動,并力爭在"十三五"期間促進區域經濟進一步均衡發展。

3、【今後"吃野味"將被法律追究】今年1月1日實施的《野生動物保**》,禁止食用非法購買國家重點保護的野生動物及其製品。參加飯局,先學法,保護動物也保護自己!

4、【利好:中金所調整股指期貨保證金】自2017年2月17日結算時起,滬深300和上證50股指期貨各合約非套期保值持倉的交易保證金標準,由目前合約價值的40%調整為20%;中證500股指期貨各合約非套期保值持倉的交易保證金標準,甴目前合約價值的40%調整為30%。滬深300、上證50和中證500股指期貨各合約套期保值持倉的交易保證金標準仍為合約價值的20%。自2017年2月17日起,將股指期貨日內過度交易行為的監管標準從原先的10手調整為20手,套期保值交易開倉數量不受此限。

5、【網捐平台"輕鬆籌"被民政部約談】該平台不具有公開募捐資格等問題,造成不良影響。此前,它被民政部遴選指定的慈善組織互聯網公開募捐信息平台。

6、【半數20億級別富豪無高學歷】胡潤的"2017社會大學英雄榜"顯示,2000多位20億元及以上的企業家中,一半以上沒有全日制普通本科或者研究生學歷。前100位社會大學企業家的平均財富,相比有全日制普通本科或者研究生企業家相差96億元。在年齡上,前者比後者大6歲。

7、【美國總統:美國與以色列盟友的關係牢不可破】特朗普表示,以色列是面臨**堅韌不拔的象徵,聯合國對以色列非要不公,會採取更多措施不讓伊朗開發核武器。

8、【歐盟正準備提前至4月或者5月同中國在布魯塞爾舉行峰會】促進自由貿易和國際合作,以應對美國新政府更趨保護主義和**主義的政策立場。

9、【昨日股市收評:滬指反彈 福建自貿區領漲】昨,滬市報3229.62點,漲0.52%,三利好助大盤站穩3200點!

10、【仙言潮聲】低素質的人,是人整人,整來整去整自己,害人又害己。高素質的人,是人幫人,幫來幫去幫自己,互相成就了彼此!

美好的一天從互相幫助開始!

附iii.2017年2月17日周五讀報!一切美好從「從容」開始!

1、商務部:1月中國對外非金融類直接投資金額約77.3億美元,同比大幅下降35.7%,比2016年12月降低4.6%。這是過去一年來,中國對外投資首次同比負增長。

2、國家食葯監總局發布《食品安全欺詐行為查處辦法(徵求意見稿)》規定,普通食品使用「可治療」「可治癒」等醫療術語、使用「純綠色」「無污染」等誇大宣傳用語、以轉基因食品冒充非轉基因食品等,構成食品宣傳欺詐。

3、針對近期多地食用穿山甲事件,國家林業局正式回應:中國此前法規僅對捕殺和交易野生動物者處罰,自今年1月1日起實施的新版《野生動物保護法》修訂:"吃野味"不僅受社會監督,也將面臨法律追責。

4、股指期貨鬆綁第一步:下調交易手續費、降低保證金比例。17日起,將股指期貨日內過度交易行為的監管標準從原先的10手調整為20手,套期保值交易開倉數量不受此限;滬深300、上證50股指期貨非套期保值交易保證金調整為20%,中證500股指期貨非套期保值交易保證金調整為30%;將滬深300、上證50、中證500股指期貨平今倉交易手續費調整為成交金額的萬分之九點二。

5、成都獲批「中國製造2025」試點示範城市。成都由此成為繼寧波市、蘇南城市群和珠江西岸城市群之後,全國第三批、西部第一批「中國製造2025」試點示範城市。

6、樂視體育或棄中超獨播:雖然幾方協議並未最終簽署,但樂視體育放棄獨播權、蘇寧旗下的PPTV聚力體育強勢入局似乎已成業內共識。一旦樂視的身份從「獨家」變成「非獨家」,版權上的花費將從一年13.5億驟降為3億。

7、一個月僅賣出一輛,豐田普銳斯在華陷入銷售窘境。豐田去年12月在中國賣出的這輛普銳斯,也是5月份以來賣出的首輛。普銳斯去年在華銷量僅為76輛,2015年約為700輛。

8、國際高等教育信息機構(QS):加拿大的蒙特利爾擊敗法國巴黎和英國倫敦贏得2017"世界最佳留學城市"排名第一。法國巴黎居第二,英國倫敦緊隨其後居第三,隨後是韓國首爾、澳洲墨爾本、德國柏林及日本東京。

9、當地時間16日下午,伊拉克首都巴格達西南部一處汽車銷售市場發生汽車炸彈襲擊。武裝分子將裝滿炸藥的汽車停放在人流密集處后離開,然後引爆炸彈,襲擊已造成至少45人死亡、49人受傷。

10、據巴基斯坦南部信德省塞赫萬警方消息,16日夜在塞赫萬地區一處宗教場所內發生的自殺式爆炸襲擊已導致72人死亡、200多人受傷。爆炸發生時該宗教場所內約有500人至800人,一名襲擊者在人群中引爆了爆炸物。塞赫萬地區已宣布進入緊急狀態,並已請求軍方參與救援。

11、大馬警方披露刺殺金正男的第二、三名嫌犯身份,第二名嫌犯是一名夜店女公關,她說,神秘男子給了她100美元,邀請她拍攝惡搞短片,而第三名男嫌犯則是她的男友。

12、走過了世間的繁華與喧囂,閱盡了世事的紛繁與複雜,才會幡然醒悟:原來不完美的生活才有精彩,不圓滿的人生才有故事。所以,再苦也要記得笑一笑,心靜自然天地寬。

美好一天從「從容」開始!

附iv. 2017年2月17日(星期五)農曆丁酉年正月廿一乙亥日

每天三分鐘 知曉天下事

A、【國內】

【置頂】國務院辦公廳印發《「十三五」全國結核病防治規劃》,及早發現並全程規範治療結核病;

1)千年古城北京打響一場治理「城市病」的攻堅戰,衝破體制藩籬,劍指四大頑疾,發掘潛力,探索「祛病」之道;

2)新華社評論員:抓住領導幹部這個「關鍵少數」,推動全面從嚴治黨不斷向縱深發展;

3)[法制與反腐] 江蘇銀行原黨委書記王建華接受組織調查;最高法:已有615萬「老賴」因失信無法坐飛機;無錫原副市長嵇克儉徐州原副市長李連玉「被雙開」;

4)「決心」號抵達南海目標海域,第三次南海大洋鑽探順利開鑽;

5)天津將實施多個重大項目助力京津冀交通一體化;

6)國家安監總局、國家煤礦安監局:到2018年底所有千人礦井下井人數減少30%以上;

7)中藥改名徵求意見:風油精等數千藥品或需改名(中國青年報);

8)[軍事] 三沙市永樂群島軍民吃上自產蔬菜;俄媒:俄售華S400防空導彈合同已處於生產階段;空軍由大到強,我國新一代遠程轟炸機「核常兼備」;

9)[港澳] 香港故宮文化博物館設計融入傳統宮廷元素;港鐵南港島線一車站「水浸」封站,列車服務受阻;兩港籍旅客從內地攜孕婦血出境被查獲;

10)[台灣] 全國台企業聯在京舉辦聯誼活動,張志軍出席並致辭;陳菊誇蔡英文兩岸工作做得好被諷:睜眼說瞎話;寒潮籠罩台灣4天猝死154人,最年輕者年僅23歲。

B、【國際】

1)應李克強總理邀請,法蘭西共和國總理貝爾納·卡澤納夫將於2月21日至23日對中國進行正式訪問;

2)中國外交部回應金正男(金正日長子)遇刺事件:有關事件發生在馬來西亞,目前馬方正在對事件進行調查;外交部回應日本中小學課改將釣魚島篡改為「日固有領土」:無論日方說什麼,做什麼,都改變不了釣魚島屬於中國的事實;

3)東方航空MU552次倫敦至上海客機因技術故障迫降俄羅斯機場,東航回應:系發動機故障;

4)美聲稱將派航母赴南海維護「航行自由」,中方回應:堅決反對任何國家以航行和飛越自由為名,損害中國主權和安全;

5)北約各國防長強調跨大西洋關係重要性;1.6萬噸朝鮮進口無煙煤被溫州退回:汞超標;

6)特朗普推翻奧巴馬時代「反腐敗」法規,美國能源公司或受益;

7)韓親信門進展:前梨花女大校長崔京姬被逮捕,韓檢方再申請李在鎔逮捕令;

8)巴基斯坦一清真寺發生自殺式-爆-炸-襲擊,已致50死200傷。

C、【財經證券】

1)發改委澄清「為經濟速度犧牲質量」,吸引外資良好,2020年形成合理資源分配;

2)中國營改增獲國際高度認可,各國知名財稅專家對此給予了充分肯定和高度評價;

3)《中國製造2025》頂層設計基本完成,轉入實施階段;

4)支付寶又出了個移動POS機的功能,這次要取代線下賣場的POS機;

5)證監會計劃推出限制再融資政策,限制再融資頻率和規模;

6)昨日收盤:滬指3229.62/+0.52% 深成指10253.96/+0.75% 創業板1897.63/+0.28% 恆指24107.70/+0.47%。

D、【文教體娛】

1)教育部:今年秋季起小學科學課程起始年級調整為一年;北京近9萬中小學生選修中醫課;

2)麗江開千人大會整頓旅遊市場,決不讓遊客權益受損害;

3)西安地鐵壁畫引爭議,出現玄奘與泰姬陵「同框」、世界著名城市標錯地理位置等,有損西安的文化歷史名城形象,地鐵方:若有誤將修改完善;

4)女排「三叉戟」形成,邊攻實力新周期堪稱世界最強;

5)上海上港官宣葡萄牙中衛卡瓦略加盟,將為球隊防線提供充足保障。

E、【生活服務】

1)官方:食鹽斷供搶購可能性大減,能確保極端情況下供應;

2)支付寶:自20日起付款碼將專碼專用,只用於線下付款;

3)北京:污染重點區域今年將實名管理,百餘公交場站今年添658個充電樁,安全管理措施出台之前擬暫停新建玻璃棧道;

4)3月1日起上海的室內公共場所將全面禁煙;預計4年內,珠三角新能源公交車佔比超85%;

5)南京公廁將提高女性廁位比例,增設第三衛生間;

6)酷似芒果卻是穿腸毒藥,河南首次截獲海檬樹種。

F、【健康養生】

1)治皮膚瘙癢取食醋500毫升,文火煮到50毫升左右的時候,倒入容器內,另外將苦參20克,花椒5克洗凈之後放入其內,浸泡一周,做成藥液,塗抹在患處即可。

2)引發腦梗心梗這2大疾病的因素很多,其中很重要的一個因素是不吃早餐。早餐沒吃,胃裡的食物不足 ,就會有許多的B型血栓球蛋白在人的血液中形成,而這種蛋白質極易使血液凝固及導致人得心肌梗塞。

(編輯:西安知非 自新華、中新、騰訊、鳳凰、東方財富網)

秦隴紀10數據簡化DataSimp,祝QQ空間微信公眾號、新浪博客微博、今日頭條頭條號、人人知乎貼吧「數據簡化DataSimp、科學Sciences」讀者2017酉雞年新的一年,一帆風順、二龍騰飛、三羊開泰、四季平安、五福臨門、六六大順、七星高照、八方來財、九九同心、十全十美、百事亨通、千事吉祥、萬事如意、安康吉祥。新年新氣象,每天心情美美噠,身體棒棒噠!

(西安秦隴紀10數據簡化DataSimp綜合彙編,歡迎有志於數據簡化之傳媒、技術的實力夥伴加入全球「數據簡化DataSimp」團隊!)

你可能會喜歡