總結!實用Python文本預處理代碼

2021-01-09 網易

  本文將討論文本預處理的基本步驟,旨在將文本信息從人類語言轉換為機器可讀格式以便用於後續處理。此外,本文還將進一步討論文本預處理過程所需要的工具。

  當拿到一個文本後,首先從文本正則化 (text normalization) 處理開始。常見的文本正則化步驟包括:

  

刪除文本中出現的標點符號、重音符號以及其他變音符號文本規範化 (text canonicalization)

  下面將詳細描述上述文本正則化步驟。

  將文本中出現的字母轉化為小寫

  示例1:將字母轉化為小寫

  Python 實現代碼:

  input_str = 」The 5biggest countries bypopulation in2017are China, India, United States, Indonesia, andBrazil.」

  input_str = input_str.lower

  print(input_str)

  輸出:

  the 5biggest countries bypopulation in2017are china, india, united states, indonesia, andbrazil.

  刪除文本中出現的數字

  如果文本中的數字與文本分析無關的話,那就刪除這些數字。通常,正則化表達式可以幫助你實現這一過程。

  示例2:刪除數字

  Python 實現代碼:

  importre

  input_str = 』Box A contains 3red and5white balls, whileBox B contains 4red and2blue balls.』

  result = re.sub(r』d+』, 『』, input_str)

  print(result)

  輸出:

  Box A contains red andwhite balls, whileBox B contains red andblue balls.

  刪除文本中出現的標點

  以下示例代碼演示如何刪除文本中的標點符號,如 [!」#$%&』*+,-./:;<=>?@[]^_`{|}~] 等符號。

  示例3:刪除標點

  Python 實現代碼:

  importstring

  input_str = 「This &is [an] example? {of} string. with.? punctuation!!!!」 # Sample string

  result = input_str.translate( string.maketrans(「」,」」), string.punctuation)

  print(result)

  輸出:

  This isan example ofstringwithpunctuation

  刪除文本中出現的空格

  可以通過 strip函數移除文本前後出現的空格。

  示例4:刪除空格

  Python 實現代碼:

  input_str = 「 t a string examplet 「

  input_str = input_str.strip

  input_str

  輸出:

  『a stringexample』

  符號化( Tokenization)

  符號化是將給定的文本拆分成每個帶標記的小模塊的過程,其中單詞、數字、標點及其他符號等都可視為是一種標記。在下表中 (Tokenization sheet),羅列出用於實現符號化過程的一些常用工具。

  

  刪除文本中出現的終止詞

  終止詞 (Stop words) 指的是「 a」,「 a」,「 on」,「 is」,「 all」等語言中最常見的詞。這些詞語沒什麼特別或重要意義,通常可以從文本中刪除。一般使用 Natural Language Toolkit(NLTK) 來刪除這些終止詞,這是一套專門用於符號和自然語言處理統計的開源庫。

  示例7:刪除終止詞

  實現代碼:

  input_str = 「NLTK isa leading platform forbuilding Python programs to work withhuman language data.」

  stop_words = set(stopwords.words(『english』))

  fromnltk.tokenize importword_tokenize

  tokens = word_tokenize(input_str)

  result = [i fori intokens ifnoti instop_words]

  print(result)

  輸出:

  [『NLTK』, 『leading』, 『platform』, 『building』, 『Python』, 『programs』, 『work』, 『human』, 『language』, 『data』, 『.』]

  此外, scikit-learn 也提供了一個用於處理終止詞的工具:

  fromsklearn.feature_extraction.stop_words importENGLISH_STOP_WORDS

  同樣, spaCy 也有一個類似的處理工具:

  fromspacy.lang.en.stop_wordsimportSTOP_WORDS

  刪除文本中出現的稀疏詞和特定詞

  在某些情況下,有必要刪除文本中出現的一些稀疏術語或特定詞。考慮到任何單詞都可以被認為是一組終止詞,因此可以通過終止詞刪除工具來實現這一目標。

  詞幹提取(Stemming)

  詞幹提取是一個將詞語簡化為詞幹、詞根或詞形的過程 (如 books-book, looked-look)。當前主流的兩種算法是 Porter stemming 算法 (刪除單詞中刪除常見的形態和拐點結尾 ) 和 Lancaster stemming 算法。

  

  示例 8:使用 NLYK 實現詞幹提取

  實現代碼:

  fromnltk.stem importPorterStemmer

  fromnltk.tokenize importword_tokenize

  stemmer= PorterStemmer

  input_str=」There are several types ofstemming algorithms.」

  input_str=word_tokenize(input_str)

  forword ininput_str:

  print(stemmer.stem(word))

  輸出:

  There are sever typeofstem algorithm.

  詞形還原(Lemmatization)

  詞形還原的目的,如詞幹過程,是將單詞的不同形式還原到一個常見的基礎形式。與詞幹提取過程相反,詞形還原並不是簡單地對單詞進行切斷或變形,而是通過使用詞彙知識庫來獲得正確的單詞形式。

  當前常用的詞形還原工具庫包括: NLTK(WordNet Lemmatizer), spaCy, TextBlob, Pattern, gensim, Stanford CoreNLP,基於內存的淺層解析器 (MBSP), Apache OpenNLP, Apache Lucene,文本工程通用架構 (GATE), Illinois Lemmatizer 和 DKPro Core。

  示例 9:使用 NLYK 實現詞形還原

  實現代碼:

  fromnltk.stem importWordNetLemmatizer

  fromnltk.tokenize importword_tokenize

  lemmatizer=WordNetLemmatizer

  input_str=」been had done languages cities mice」

  input_str=word_tokenize(input_str)

  forword ininput_str:

  print(lemmatizer.lemmatize(word))

  輸出:

  be have dolanguagecity mouse

  詞性標註(POS)

  詞性標註旨在基於詞語的定義和上下文意義,為給定文本中的每個單詞 (如名詞、動詞、形容詞和其他單詞 ) 分配詞性。當前有許多包含 POS 標記器的工具,包括 NLTK, spaCy, TextBlob, Pattern, Stanford CoreNLP,基於內存的淺層分析器 (MBSP), Apache OpenNLP, Apache Lucene,文本工程通用架構 (GATE), FreeLing, Illinois Part of Speech Tagger 和 DKPro Core。

  示例 10:使用 TextBlob 實現詞性標註

  實現代碼:

  input_str=」Parts ofspeech examples: an article, to write, interesting, easily, and, of」

  fromtextblob importTextBlob

  result = TextBlob(input_str)

  print(result.tags)

  輸出:

  [(『Parts』, u』NNS』), (『of』, u』IN』), (『speech』, u』NN』), (『examples』, u』NNS』), (『an』, u』DT』), (『article』, u』NN』), (『to』, u』TO』), (『write』, u』VB』), (『interesting』, u』VBG』), (『easily』, u』RB』), (『and』, u』CC』), (『of』, u』IN』)]

  詞語分塊(淺解析)

  示例 11:使用 NLYK 實現詞語分塊

  第一步需要確定每個單詞的詞性。

  實現代碼:

  input_str=」A black television anda white stove were bought forthe newapartment ofJohn.」

  fromtextblob importTextBlob

  result = TextBlob(input_str)

  print(result.tags)

  輸出:

  [(『A』, u』DT』), (『black』, u』JJ』), (『television』, u』NN』), (『and』, u』CC』), (『a』, u』DT』), (『white』, u』JJ』), (『stove』, u』NN』), (『were』, u』VBD』), (『bought』, u』VBN』), (『for』, u』IN』), (『the』, u』DT』), (『new』, u』JJ』), (『apartment』, u』NN』), (『of』, u』IN』), (『John』, u』NNP』)]

  第二部就是進行詞語分塊

  實現代碼:

  reg_exp = 「NP: {

  ?*}」

  rp = nltk.RegexpParser(reg_exp)

  result = rp.parse(result.tags)

  print(result)

  輸出:

  (S (NP A/DT black/JJ television/NN) and/CC (NP a/DT white/JJ stove/NN) were/VBD bought/VBN for/ IN(NP the/DT new/JJ apartment/NN)

  of/ INJohn/NNP)

  也可以通過 result.draw() 函數繪製句子樹結構圖,如下圖所示。

  

  

  示例 12:使用 TextBlob 實現詞性標註

  實現代碼:

  fromnltk importword_tokenize, pos_tag, ne_chunk

  input_str = 「Bill works forApple so he went to Boston fora conference.」

  printne_chunk(pos_tag(word_tokenize(input_str)))

  輸出:

  (S (PERSON Bill/NNP) works/VBZ for/ INApple/NNP so/ INhe/PRP went/VBD to/ TO(GPE Boston/NNP) for/ INa/DT conference/NN ./.)

  共指解析 Coreference resolution(回指解析度 anaphora resolution)

  代詞和其他引用表達應該與正確的個體聯繫起來。 Coreference resolution 在文本中指的是引用真實世界中的同一個實體。如在句子 「安德魯說他會買車」中,代詞「他」指的是同一個人,即「安德魯」。常用的 Coreference resolution 工具如下表所示,包括 Stanford CoreNLP, spaCy, Open Calais, Apache OpenNLP 等。

  

  搭配提取(Collocation extraction)

  搭配提取過程並不是單獨、偶然發生的,它是與單詞組合一同發生的過程。該過程的示例包括「打破規則 break the rules」,「空閒時間 free time」,「得出結論 draw a conclusion」,「記住 keep in mind」,「準備好 get ready」等。

  

  示例 13:使用 ICE 實現搭配提取

  實現代碼:

  input=[「he andChazz duel withall keys on the line.」]

  fromICE importCollocationExtractor

  extractor = CollocationExtractor.with_collocation_pipeline(「T1」 , bing_key = 「Temp」,pos_check = False)

  print(extractor.get_collocations_of_length(input, length = 3))

  輸出:

  [「on the line」]

  關係提取(Relationship extraction)

  關係提取過程是指從非結構化的數據源 (如原始文本 )獲取結構化的文本信息。嚴格來說,它確定了命名實體 (如人、組織、地點的實體 ) 之間的關係 (如配偶、就業等關係 )。例如,從「昨天與 Mark 和 Emily 結婚」這句話中,我們可以提取到的信息是 Mark 是 Emily 的丈夫。

  總結

相關焦點

  • 使用一行Python代碼從圖像讀取文本
    雖然圖像分類和涉及到一定程度計算機視覺的任務可能需要大量的代碼和紮實的理解,但是從格式良好的圖像中讀取文本在Python中卻是簡單的,並且可以應用於許多現實生活中的問題。在今天的帖子中,我想證明這一點。雖然會安裝一些庫,但不會花很多時間。
  • Python視頻教程網課編程零基礎入門數據分析網絡爬蟲全套Python...
    教程大合集,包含python所有就業方向,每套課程均來自市面上主流培訓機構的原版教程,價值都在數百元以上 每套課程均包含:視頻課程+課件+原始碼 重要:建議根據自己工作方向和需求,重點選擇2到3套課程學精,吃透,然後在工作 重要:零基礎小白建議先選擇零基礎全能篇的一套課程學精,然後再根據自 己的需求和規劃選擇學習其他方向課程,學完後一定要多實踐
  • 數值數據的特徵預處理
    以下是一些最常見的數據類型:數值特徵分類特徵和順序特徵日期和時間文本圖像不同的數據類型和不同的機器學習模型需要不同類型的特徵預處理。一些預處理方法對於所有數據類型都是通用的。數值數據的特徵預處理數值數據有測量或計數的意義。數值數據的例子包括僱員的工資、年齡和擁有的房屋數量。數值數據可以進一步分為兩種類型:離散型和連續型。
  • opencv-python圖像預處理-濾波
    為了消除外界環境對圖像採集的幹擾,增強圖像的邊緣及灰度跳變的部分,使圖像變得清晰以及提高圖像處理速度需要對圖像進行預處理操作,主要是對圖像進行濾波和增強操作。使用的方法可以分為空間域處理和頻率域處理兩類。空間域指圖像平面本身,這類圖像處理方法用各種模板直接與圖像進行卷積運算,實現對圖像的處理。
  • NLP中的預處理:使用python進行文本歸一化
    我們在有關詞幹的文章中討論了文本歸一化。 但是,詞幹並不是文本歸一化中最重要(甚至使用)的任務。 我們還進行了其他一些歸一化技術的研究,例如Tokenization,Sentencizing和Lemmatization。 但是,還有其他一些用於執行此重要預處理步驟的小方法,將在本文中進行討論。
  • Python代碼性能調試和優化
    找出程序中影響程序性能的代碼。num *= xs += num / factgetcontext().prec -= 2return +sprint(exp(Decimal(150)))print(exp(Decimal(400)))print(exp(Decimal(3000)))最簡單的調試最簡單且實用的調試性能調試的方法是使用
  • 慢步學習,python語言編程,來扯扯語言的學習理解
    不在於程序的完備,在於理解程序原始碼的適用場景和效果。例如筆者之前寫的一個實例代碼對於編程老鳥筆者不敢說啥,但對於初學者,這樣的例子,真的很實用,簡短,容易理解,還具備一定的功能。簡單解釋一下實例內容:引用 python-docx庫的Document模塊/函數/對象,打開目標操作文檔作為變量d,輸出目標操作文檔標題(即第一行內容,這個是筆者用來顯示操作前後變化用的),將修改後的標題內容賦值給變量changetotext,再將這個變量內文本賦值給目標操作文本。
  • windows上python開發環境的搭建
    通過自帶的交互式窗口,我們可以執行簡單的python語句,對於實際開發中需要的大量代碼,我們則需要編寫python腳本,通過腳本的方式來執行。所謂腳本,就是一個文件,裡面保存了程序的原始碼。腳本文件的創建,既可以通過文本編輯器,也可以通過成熟的IDE,只需要記住一點,千萬不用使用windows自帶的記事本和word。
  • 令人讚嘆的8個Python新手工具!
    它的主要功能包括Python shell 窗口(交互式解釋器)、跨平臺(Windows、Linux、UNIX、Mac OS X)、智能縮進、代碼著色、自動提示、可以實現斷點提示、單步執行等調試功能的基本集成調試器。IDLE 易於學習,因為它重量輕且易於使用。但它僅僅是編程世界的敲門磚,可以讓你快速上手,之後的路途依然要找尋一些別的工具。
  • 小白學數據小抄放送 Python,R,大數據,機器學習
    通過它們,你將學會如何在python中加載文件,轉換變量,分類數據,繪圖,創建樣本數據集,處理缺損數據等等。這張表總結了三個庫中常用的語句,這是用於探索性數據分析的最簡單的小抄本之一。 答:Scikit-Learn專用小抄和文本清洗教程喜歡麼? 8. Scikit-Learn小抄表 這是為使用Python中scikit-learn模塊的每種方法準備的小抄表。它給出了不同的函數,用於數據的預處理、回歸、分類、聚類、降維、模型選擇和指標以及它們對應的說明。這份小抄最特別的是它涵蓋了機器學習的完整階段。
  • 小白學數據28張小抄放送 Python,R,大數據,機器學習
    5. 答:Scikit-Learn專用小抄和文本清洗教程喜歡麼?  8. Scikit-Learn小抄表 這是為使用Python中scikit-learn模塊的每種方法準備的小抄表。它給出了不同的函數,用於數據的預處理、回歸、分類、聚類、降維、模型選擇和指標以及它們對應的說明。這份小抄最特別的是它涵蓋了機器學習的完整階段。
  • 學習Python正則表達式
    result = re.findall('111-1234567', text)上面的代碼返回「111–1234567」。如果它在文本中重複,它將返回兩次電話號碼。『有時我不知道具體的號碼,需要從評論中找到客戶號碼。』
  • 機器學習、深度學習算法原理與案例實踐暨Python大數據綜合應用...
    共4天8節,講解機器學習和深度學習的模型理論和代碼實踐,梳理機器學習、深度學習、計算機視覺的技術框架,從根本上解決如何使用模型、優化模型的問題;每次課中,首先闡述算法理論和少量公式推導,然後使用真實數據做數據挖掘、機器學習、深度學習的數據分析、特徵選擇、調參和結果比較。
  • 2019年必知的10大頂級Python庫
    在 TensorFlow 創建的所有庫都是用 C 和 C++編寫的,但是,它有一個複雜的前端,是用 python 實現的。你的 python 代碼將被編譯,然後在使用 C 和 C++構建的 TensorFlow 分布式執行引擎上執行。實際上,TensorFlow 的應用是無限的,這就是它美妙的地方。
  • 樸素貝葉斯分類器詳解及中文文本輿情分析(附代碼實踐)
    內容包括:1.樸素貝葉斯數學原理知識2.naive_bayes用法及簡單案例3.中文文本數據集預處理4.樸素貝葉斯中文文本輿情分析本篇文章為基礎性文章,代碼如下:1print clf.class_prior_2#[ 0.5  0.5]2) class_count_屬性獲取各類標記對應的訓練樣本數,代碼如下:1print
  • python邏輯控制總結——斐波那契數列
    今天,我們先介紹一款python利器,PyCharm。要測評一款IDE(Integrated Development Environment,集成開發環境)工具,是比較複製的。這裡,我們不試圖灌輸PyCharm比其它IDE更優秀的觀點。事實上,工具這種東西,基本功能都是一樣的,比如項目組織,代碼高亮,代碼提示,運行環境等。大部分的場景下,這些能力已經足夠了。
  • 乾貨丨Python接口測試自動化實戰及代碼示例:含get、post等方法
    最終選定 python 作為腳本開發語言,使用其自帶的 requests 和 urllib 模塊進行接口請求,使用優化後的 unittest 測試框架編寫測試接口函數,測試結果選用 HTMLTestRunner 框架予以展示,並使用 python 的 ssl 模塊支持 https 協議的驗證。接下來,我詳細地介紹這些模塊,並給出各個模塊完整的測試代碼。
  • 代碼詳解:Python正則表達式的終極使用指南
    全文共8032字,預計學習時長16分鐘處理文本數據的一個主要任務就是創建許多以文本為基礎的特性。人們可能想要在文本中找出特定格式的內容,比如找出存在於文本中的電子郵件,或者大型文本中的電話號碼。雖然想要實現上述功能聽起來很繁瑣,但是如果使用Python正則表達式模塊,就可以使這一操作更加簡單。
  • Python2 已終結,入手Python 3,你需要這30個技巧
    勤勞的程式設計師們,這裡有 30 條使用 Python 時實用的建議和小技巧。你可以把讀這篇文章當做工作間隙的小憩,而且我保證你學到的東西會跟工作時一樣多。1. 使用 Python3如果你關注 Python 的話,應該會知道 Python 2 已經於今年(2020 年)1 月 1 日正式棄用了。
  • Python新手爬蟲,簡單製作抓取廖雪峰的教程的小爬蟲
    在整個抓取過程中,除了普通的文本以外,還需要處理 3個地方,分別是:代碼、圖片、視頻,因為目前只寫到了文本文件,所以直接抓到圖片或者視頻的地址,標識清楚後寫入到 txt,這裡可以在進一步,寫到 word/pdf 或者其他文件,留待以後改進!