淺談NLP 文字分類/情感分析 任務中的文字預處理工作
淺談NLP 文字分類/情感分析 任務中的文字預處理工作
前言
之所以心血來潮想寫這篇部落格,是因為最近在關注NLP文字分類這類任務中的文字預處理工作,想總結一下自己的所學所想,老規矩,本博文記載 僅供備忘與參考,不具備學術價值,本文預設使用python3程式設計(程式碼能力是屎山級別的,請諒解),預設文字為英文,程式碼主要使用Pytorch(博主老笨蛋了,之前一直執迷不悟用Keras,現在剛剛開始用torch,怎麼說呢,挺香的 XD)
NLP相關的文字預處理
NLP文字預處理一直是一個很受關注的問題,當下最常用的文字預處理工具當屬nltk,功能統一,api也很簡單,安裝的話直接輸入:
pip install nltkpython#進入pythonimport nltk nltk.download()#下載需要的內容
一般來講,最簡單最常見的預處理就是把一整段文字分詞化(Tokenize),對於一段文字(Sentence),可以直接呼叫nltk庫功能將其分詞化,返回結果為一個詞表(word list)。
import nltk# 為方便,任何import都只在所有程式碼塊中出現一遍,以後的也同理word_list=nltk.word_tokenize(sentence)
一般來講在預處理資料的時候還會選擇去除標點以及不需要的url等等內容,因此我在自己做實驗的時候選擇使用以下配置來作為基礎的預處理方法。
import stringimport re PUNCT_TO_REMOVE = string.punctuation url_pattern = re.compile(r'https?://\S+|www\.\S+') sentence=url_pattern.sub(r'', sentence)#remove puncsentence=sentence.translate(str.maketrans('', '', PUNCT_TO_REMOVE)) tmp_word_list=nltk.word_tokenize(sentence) word_list=[]for word in tmp_word_list: #lower word=word.lower() word_list.append(word)
事實上,文字預處理的方法是非常多樣的,根據下邊程式碼塊中的參考內容連結,你可以找到各種各樣數十種有針對性或者泛用的預處理方法,有的是為了處理Twitter中的一些tag,有的是是為了對文字進行詞根化,有的是為了將雙重否定轉換成肯定……總而言之, 一切預處理方法都是為了使得NLP任務更好地被執行,使得資料集更容易也更好地被訓練。因此在我們針對NLP任務選擇預處理方法時也應當注意選擇合適的方法。如果我們在一個新聞資料集中使用去除Twitter中tag的預處理方法進行處理的話只會浪費時間。
# 參考連結
當然,很多預處理方法在常見的場合並不適用,例如文字中 在Reuters新聞分類以及IMDB情感分析等常用任務上就沒有什麼用處。
為此我總結了5個 我認為常用的預處理方法在下面的程式碼中
# 1. stem詞根化porter = nltk.stem.porter.PorterStemmer() tmp_word_list=nltk.word_tokenize(sentence) word_list=[]for word in tmp_word_list: word=porter.stem(word) word_list.append(word)# 2. spell check拼寫檢查# pip install pyspellcheckerfrom spellchecker import SpellChecker spell=SpellChecker() tmp_word_list=nltk.word_tokenize(sentence) word_list=[]for word in tmp_word_list: #lower misspelled_words = spell.unknown(word.split()) if word in misspelled_words: word_list.append(spell.correction(word)) else: word_list.append(word)# 3. negation否定詞替換token=nltk.word_tokenize(token) word_list=[] i, l = 0, len(token)while i < l: word = token[i] if word == 'not' and i+1 < l: ant = replace(token[i+1]) if ant: word_list.append(ant) i += 2 continue word_list.append(word) i += 1def replace(self,word, pos=None): """ Creates a set of all antonyms for the word and if there is only one antonym, it returns it """ antonyms = set() for syn in nltk.corpus.wordnet.synsets(word, pos=pos): for lemma in syn.lemmas(): for antonym in lemma.antonyms(): antonyms.add(antonym.name()) if len(antonyms) == 1: return antonyms.pop() else: return None # 4. stop word 停用詞替換stops_list = set(nltk.corpus.stopwords.words('english')) tmp_word_list=nltk.word_tokenize(token) word_list=[]for word in tmp_word_list: if word not in stops_list: word_list.append(word)# 5. contraction 連線詞分離# pip install contractionsimport contractions as ctr tmp_word_list=token.split(' ') word_list=[]for word in tmp_word_list: word=ctr.fix(word) tmp=nltk.word_tokenize(word) for w in tmp: word_list.append(w)
今天暫時更到這裡,後續把自己做實驗遇到的其他一些有趣內容補上
轉自https://www.cnblogs.com/shiningrain3/p/13856645.html
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69983372/viewspace-2728748/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【NLP】文字情感分析
- pyhanlp文字分類與情感分析HanLP文字分類
- CNN也能用於NLP任務,一文簡述文字分類任務的7個模型CNN文字分類模型
- 文字情感分析
- 全棧 - 17 NLP 使用jieba分詞處理文字全棧Jieba分詞
- NLP入門(十)使用LSTM進行文字情感分析
- nlp中文字輸入的資料預處理方式
- 華為雲 API 自然語言處理的魅力—AI 情感分析、文字分析API自然語言處理AI
- Python文字處理NLP:分詞與詞雲圖Python分詞
- NLP-使用CNN進行文字分類CNN文字分類
- 文字挖掘之情感分析(一)
- 10 文字分析處理命令
- 文字檢測預處理地址
- 系統學習NLP(十九)--文字分類之FastText文字分類AST
- 文字圖Tranformer在文字分類中的應用ORM文字分類
- Spark機器學習實戰 (十一) - 文字情感分類專案實戰Spark機器學習
- 淺談任務分發中的機制與併發
- 文字預處理技術詳解
- 【火爐煉AI】機器學習039-NLP文字分類器AI機器學習文字分類
- 【NLP】TensorFlow實現CNN用於文字分類(譯)CNN文字分類
- Python自然語言處理 6 學習分類文字Python自然語言處理
- 如何用機器學習處理二元分類任務?機器學習
- NLP概述和文字自動分類演算法詳解演算法
- 【NLP】TensorFlow實現CNN用於中文文字分類CNN文字分類
- 文字分類-TextCNN文字分類CNN
- 文字分類模型文字分類模型
- tensorflow 學習筆記使用CNN做英文文字分類任務筆記CNN文字分類
- 如何用Python和機器學習訓練中文文字情感分類模型?Python機器學習模型
- 批處理中如何將百分號輸出到文字
- Python文字資料分析與處理Python
- 文字挖掘預處理之TF-IDF
- 中文文字挖掘預處理流程總結
- 英文文字挖掘預處理流程總結
- ML/NLP入門教程Python版(第一部分:文字處理)Python
- 系統學習NLP(二十)--文字聚類聚類
- 簡單的文字處理
- 文字處理的有關
- nlp文字處理開源工具,及聊天機器人實現開源工具機器人