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

2021-01-07 網易

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

  當拿到一個文本後,首先從文本正則化 (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文本預處理,試試BAT大佬總結的實用代碼!
    作者:Data Monster, 譯者:Linstancy, 出品:AI科技大本營(ID:rgznai100)本文將討論文本預處理的基本步驟此外,本文還將進一步討論文本預處理過程所需要的工具。當拿到一個文本後,首先從文本正則化(text normalization) 處理開始。常見的文本正則化步驟包括:下面將詳細描述上述文本正則化步驟。
  • 英文文本挖掘預處理流程總結
    ,我們總結了中文文本挖掘的預處理流程,這裡我們再對英文文本挖掘的預處理流程做一個總結。英文文本挖掘預處理特點英文文本的預處理方法和中文的有部分區別。首先,英文文本挖掘預處理一般可以不做分詞(特殊需求除外),而中文預處理分詞是必不可少的一步。第二點,大部分英文文本都是uft-8的編碼,這樣在大多數時候處理的時候不用考慮編碼轉換的問題,而中文文本處理必須要處理unicode的編碼問題。這兩部分我們在中文文本挖掘預處理裡已經講了。
  • Python文本預處理:步驟、使用工具及示例
    本文約3100字,建議閱讀6分鐘 本文將討論文本預處理的基本步驟、文本預處理過程所需要的工具。 標籤:機器學習 Python 算法 模型 本文將討論文本預處理的基本步驟,旨在將文本信息從人類語言轉換為機器可讀格式以便用於後續處理。此外,本文還將進一步討論文本預處理過程所需要的工具。當拿到一個文本後,首先從文本正則化(text normalization) 處理開始。
  • NLP入門乾貨 | 文本預處理技術詳解
    在對文本做分析時,我們一大半的時間都會花在文本預處理上,而中文和英文的預處理流程稍有不同。本文就對中、英文的常用的文本預處技術做一個總結。首先,中文文本沒有像英文用空格來分開不同單詞的,因此不能直接像英文一樣用簡單的空格或標點符號來完成分詞。所以我們一般需要用分詞算法來完成分詞,具體操作在後面會講到。當然,英文文本的預處理也有自己特殊的地方比如拼寫問題。很多時候,對英文預處理要包括拼寫檢查,比如「Helo World」這樣的錯誤,我們不能在分析的時候再去糾錯。
  • 文本挖掘預處理之TF-IDF
    Hash Trick中我們講到在文本挖掘的預處理中,向量化之後一般都伴隨著TF-IDF的處理,那麼什麼是TF-IDF,為什麼一般我們要加這一步預處理呢?這裡就對TF-IDF的原理做一個總結。1.文本向量化特徵的不足在將文本分詞並向量化後,我們可以得到詞彙表中每個詞在各個文本中形成的詞向量,比如在文本挖掘預處理之向量化與Hash Trick這篇文章中,我們將下面4個短文本做了詞頻統計:corpus=["I come to China to travel","This is a
  • 手把手 | 基於TextRank算法的文本摘要(附Python代碼)
    在20世紀50年代後期,Hans Peter Luhn發表了一篇名為《The automatic creation of literature abstract》的研究論文,它利用詞頻和詞組頻率等特徵從文本中提取重要句子,用於總結內容。
  • 入門 | 三行Python代碼,讓數據預處理速度提高2到6倍
    本文可以教你僅使用 3 行代碼,大大加快數據預處理的速度。Python 是機器學習領域內的首選程式語言,它易於使用,也有很多出色的庫來幫助你更快處理數據。但當我們面臨大量數據時,一些問題就會顯現……目前,大數據(Big Data)這個術語通常用於表示包含數十萬數據點的數據集。在這樣的尺度上,工作進程中加入任何額外的計算都需要時刻注意保持效率。
  • 【下載】Scikit-learn作者新書《Python機器學習導論》, 教程+代碼手把手帶你實踐機器學習算法
    無監督學習和預處理4. 數據表示和特徵工程5. 模型評估與提高6. 算法實踐流程7. 文本數據處理8. 使用conda安裝軟體包:如果您已經設置了Python環境,並且正在使用conda軟體包管理器,則可以通過運行下面的代碼來獲取所有軟體包:conda install numpy scipy scikit-learn matplotlib pandas pillow graphviz python-graphviz 使用pip安裝軟體包:
  • Tweets的預處理
    與數字數據不同,NLP主要處理文本。探索和預處理文本數據需要不同的技術和庫,本教程將演示基礎知識。然而,預處理不是一個算法過程。在數據科學任務中,數據的上下文通常決定了數據的哪些方面是有價值的,哪些方面是不相關的或不可靠的。在本教程中,我們將探討tweets上下文中的文本預處理,或者更廣泛地說,社交媒體中的預處理。
  • 使用Python三步完成文本到語音的轉換
    TTS簡介文本語音轉換(TTS)是將單詞轉換為語音形式的過程。程序,工具或軟體從用戶處獲取輸入文本,並使用自然語言處理方法來理解所用語言的語言學,並對文本進行邏輯推斷。該處理後的文本被傳遞到下一個塊,在該塊中對處理後的文本執行數位訊號處理。經過一些算法的處理,最終轉換為語音格式。這整個過程涉及語音的合成。
  • 使用一行Python代碼從圖像讀取文本
    雖然圖像分類和涉及到一定程度計算機視覺的任務可能需要大量的代碼和紮實的理解,但是從格式良好的圖像中讀取文本在Python中卻是簡單的,並且可以應用於許多現實生活中的問題。在今天的帖子中,我想證明這一點。雖然會安裝一些庫,但不會花很多時間。
  • 第一個Python程序——在屏幕上輸出文本
    Python 使用 print 函數在屏幕上輸出一段文本,輸出結束後會自動換行。print("Number is 198") print("Pyhon教程:http://c.biancheng.net/python/") 在 IDLE 下的演示效果:也可以將多段文本放在一個 print 函數中:print( "Hello World!"
  • PyTorch-Transformers:最先進的自然語言處理庫(附帶python代碼)
    python pytorch-transformers/examples/run_generation.py \ --model_type=gpt2 \ --length=100 \ --model_name_or_path=gpt2 \我們看看我們的GPT-2模型為輸入文本生成了什麼輸出
  • 知識詳解+Python實現|文本挖掘中的預處理方法
    在文本挖掘的預處理過程中,原始文本需要經過分詞、去除標點、去停用詞、向量化表示、TF-IDF處理等諸多流程,本文將專注TF-IDF矩陣的構建過程,向大家介紹Scikit-learn包中的兩個將原始文檔轉換為TF-IDF矩陣的模塊Tfidftransformer和Tfidfvectorizer
  • 基於Python 的自動文本提取:抽象法和生成法的比較
    >本博客是對文本摘要的簡單介紹,可以作為當前該領域的實踐總結。TextRank的工作原理如下:預處理文本:刪除停止詞並補足剩餘的單詞。創建把句子作為頂點的圖。通過邊緣將每個句子連接到每個其他句子。邊緣的重量是兩個句子的相似程度。
  • 從零開始實現穿衣圖像分割完整教程(附python代碼演練)
    研究人員可以開發具有一定實用價值的應用。 我已經在這裡展示了我對這個領域的興趣,在那裡我開發了一個來自Zalando在線商店的推薦和標記服裝的解決方案。在這篇文章中,我們會開發一個提取連衣裙的應用。 它輸入原始的圖像(從網絡上下載或用智慧型手機拍照),並提取圖像中的連衣裙。 分割的難點在於原始圖像中存在了大量的噪聲,但是我們會在預處理期間通過一個技巧來解決這個問題。
  • 使用單行代碼評估回歸模型的Python包
    對此的一個內聯嘗試是python包「 regressormetricgraphplot」的開發,該軟體包旨在幫助用戶使用單行代碼繪製評估指標圖,以針對不同的廣泛使用的回歸模型指標進行一目了然的比較。使用該實用程序包,還可以通過將其應用於日常的預測回歸問題,顯著降低從業人員以業餘方式評估不同機器學習算法的障礙。
  • 基於python將音頻文件轉化為文本輸出
    實驗目的:學習利用python進行音頻轉文本文件實驗環境:已正確安裝python3.51、需要安裝的第三方庫(1)安裝speechrecognition>speechrecognition集合了幾個語音識別庫的接口,非常的實用,本節主要用到能脫網工作的識別方法recognize_sphinx(),該方法會依賴pocketsphinx庫。
  • 總結Python繪製詞雲的三種方法
    詞雲就是通過形成 "關鍵詞雲層" 或 "關鍵詞渲染",對網絡文本中出現頻率較高的關鍵詞的視覺上的突出。詞雲圖過濾掉大量的文本信息,使瀏覽網頁者只要一眼掃過文本就可以領略文本的主旨。2."""import jiebaimport collectionsimport refrom wordcloud import WordCloudimport matplotlib.pyplot as pltwith open('comments.txt') as f:    data = f.read()# 文本預處理
  • opencv-python圖像預處理-濾波
    為了消除外界環境對圖像採集的幹擾,增強圖像的邊緣及灰度跳變的部分,使圖像變得清晰以及提高圖像處理速度需要對圖像進行預處理操作,主要是對圖像進行濾波和增強操作。使用的方法可以分為空間域處理和頻率域處理兩類。空間域指圖像平面本身,這類圖像處理方法用各種模板直接與圖像進行卷積運算,實現對圖像的處理。