<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                [TOC] **12****k字****:**理解和使用自然語言處理之終極指南(Python編碼)7k字;附數據簡化DataSimp籌收技術簡歷414字。歡迎加入共建“數據簡化DataSimp”學會及社區,關注、收藏、轉發新媒體“**數據簡化DataSimp**、科學Sciences”微信號、頭條號,轉載請寫出處:**秦隴紀10“數據簡化DataSimp/科學Sciences”公眾號、頭條號****譯編**,投稿QinDragon2010@qq.com。 **目錄** **理解和使用自然語言處理之終極指南(Python編碼)(****7.4****k字)** **附****A.?****數據簡化DataSimp****籌備收簡歷(****414****字)** ? **理解和使用自然語言處理之終極指南(Python編碼)** 秦隴紀10譯編;來源:仕瓦姆·邦薩爾(Shivam Bansal),2017年1月12日,威提亞分析學 ![](http://mmbiz.qpic.cn/mmbiz_png/UEhXjOtUwhRKuu4r8J5asJ698ugPgwyV2YmZ3cDgXhic1pIcOgt4q6Y9rz2Tl0JBLOX7ny8H1En3hHYd9Q9rib0Q/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1) ## **目錄表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?對象標準化 下圖顯示了文本預處理(清潔)流水線的體系結構。 ![](http://mmbiz.qpic.cn/mmbiz_png/UEhXjOtUwhRKuu4r8J5asJ698ugPgwyVbXLd2qKMdkm6jH5F94d4lOd4lh9vbcgJ2NEJpicM0O2O8KicCibIiay40Q/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1) ### **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.”這些單詞間的關系,可以用下圖所示的**樹形表示**形式觀察到: ![](http://mmbiz.qpic.cn/mmbiz_png/UEhXjOtUwhRKuu4r8J5asJ698ugPgwyVMxjAm4IDKautVvYQhSfYd2M1tqfKIWvkxy87EJjZT4zn5LAR3wTeGA/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1) 這個樹顯示“submitted”是這個句子的根詞,是由兩個子樹(主體與客體的子樹)相連。每個**子樹**本身一個諸如(“Bills” “ports” “proposition” relation)、(“ports” “immigration” “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標簽、依存句法分析的集成模型。**實體檢測的適用性**可以在自動聊天機器人、內容分析器和消費者洞察中看見。 ![](http://mmbiz.qpic.cn/mmbiz_png/UEhXjOtUwhRKuu4r8J5asJ698ugPgwyVY0G1Vg496TUsFiaic4jMhW79B9FY59kESib4QQREoiaxVoyOTFvKJCNR0w/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1) **主題****模型**和**命名實體識別**是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 Features****?****?****N元連續模型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向量: ![](http://mmbiz.qpic.cn/mmbiz_png/UEhXjOtUwhRKuu4r8J5asJ698ugPgwyVODBmj71zf0lVyFVKJsYaRHPz33sBqjAhWJZSR4uV52jCC6tsqTvong/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1) ``` 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)如下圖所示的**預測**。首先,文本輸入過程和功能創建。然后是機器學習模型,再就是學習這些特征值和用于對新文本做預測。 ![](http://mmbiz.qpic.cn/mmbiz_png/UEhXjOtUwhRKuu4r8J5asJ698ugPgwyVB5sWph2jb0V2E0WV0sNFITZT2PY9oic0orv2ba04xfOsVyvW9f0Vaqg/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1) 這里是一段使用文本塊庫(建立在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!學習、競爭、黑客和得到雇用! 注:閱讀原文,可跳轉到**威提亞分析學**Machine Learning欄目的英文文章Ultimate Guide to Understand & Implement Natural Language Processing (with codes in Python)。 (歡迎轉發聲明:秦隴紀10公眾號、頭條號“數據簡化DataSimp”科普文章。) ? ? **附****A.?****數據簡化DataSimp****籌備收簡歷(****414****字)** 北京數據簡化有限責任公司(籌)愿景:①行業大數據采集處理分析管理系統,②企事業單位行政人事財物聯網智能OA系統,③數據簡化DataSimp學術組及開源社區(中英雙語),④物聯網大數據底層操作系統(整合Linux開源軟件和通信模塊)。 現重點收集數據分析程序算法模型研發簡歷,成立前/每季度實習生在中關村集中面試。有意實習半年、工作一年以上的開發人員,請注明學歷和工作簡歷、職務和職業規劃、吃住薪酬預期、個人愛好等事項,投遞郵箱QinDragon2010@qq.com主題注明:應聘數據簡化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月1****7****日周****五****(農歷丁酉雞年正月****廿一****)新聞四則****匯編****** **附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.不要等到身無分文,才想起儲蓄。 **秦隴紀10數據簡化DataSimp,祝**QQ空間微信公眾號、新浪博客微博、今日頭條頭條號、人人知乎貼吧“數據簡化DataSimp、科學Sciences”**讀者****2017酉雞年**新的一年,一帆風順、二龍騰飛、三羊開泰、四季平安、五福臨門、六六大順、七星高照、八方來財、九九同心、十全十美、百事亨通、千事吉祥、萬事如意、**安康吉祥**。新年新氣象,每天心情美美噠,身體棒棒噠! (西安秦隴紀10數據簡化DataSimp綜合匯編,歡迎有志于數據簡化之傳媒、技術的實力伙伴加入全球“數據簡化DataSimp”團隊!)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看