淺談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文字分類模型
- 文字情感分析
- Python文字處理NLP:分詞與詞雲圖Python分詞
- nlp中文字輸入的資料預處理方式
- NLP入門(十)使用LSTM進行文字情感分析
- 華為雲 API 自然語言處理的魅力—AI 情感分析、文字分析API自然語言處理AI
- NLP-使用CNN進行文字分類CNN文字分類
- 【人人都能學得會的NLP - 文字分類篇 03】長文字多標籤分類分類如何做?文字分類
- 10 文字分析處理命令
- 文字挖掘之情感分析(一)
- 文字檢測預處理地址
- 文字圖Tranformer在文字分類中的應用ORM文字分類
- 系統學習NLP(十九)--文字分類之FastText文字分類AST
- 文字預處理技術詳解
- 【人人都能學得會的NLP - 文字分類篇 04】層次化多標籤文字分類如何做?文字分類
- Python文字資料分析與處理Python
- 淺談任務分發中的機制與併發
- 文字資料預處理:sklearn 中 CountVectorizer、TfidfTransformer 和 TfidfVectorizerORM
- tensorflow 學習筆記使用CNN做英文文字分類任務筆記CNN文字分類
- 文字分類-TextCNN文字分類CNN
- 文字分類模型文字分類模型
- NLP概述和文字自動分類演算法詳解演算法
- 系統學習NLP(二十)--文字聚類聚類
- Linux文字處理命令Linux
- Spark機器學習實戰 (十一) - 文字情感分類專案實戰Spark機器學習
- 【火爐煉AI】機器學習039-NLP文字分類器AI機器學習文字分類
- 文字情感分析(一):基於詞袋模型(VSM、LSA、n-gram)的文字表示模型
- 文字情感分析(二):基於word2vec和glove詞向量的文字表示
- Linux文字處理技巧分享Linux
- BiLSTM-Attention文字分類文字分類
- 文字分類論文系列---文字分類
- 文字分類(下)-卷積神經網路(CNN)在文字分類上的應用文字分類卷積神經網路CNN
- 如何用Python和機器學習訓練中文文字情感分類模型?Python機器學習模型
- Java中的任務超時處理Java
- nlp 中文資料預處理
- 如何用機器學習處理二元分類任務?機器學習