2012-02-10 37 views
16

NLTK文檔和例子的流行量致力於詞形還原和詞幹但是對作爲歸一化的這類問題非常稀疏:NLTK中是否有任何類用於文本正常化和經典化?

  • 轉換所有字母以降低或大寫
  • 移除標點符號
  • 將數字轉換爲單詞
  • 刪除重音符號和其他變音符號
  • 擴展縮寫
  • 刪除禁用詞或 「太普通」 字樣
  • 文字規範化(腫瘤=腫瘤,它的=是)

請點我在哪裏NLTK挖。歡迎任何用於上述目的的NLTK等效(JAVA或任何其他)。謝謝。

UPD。我已經爲文本到語音目的編寫了一個文本規範化的python庫https://github.com/soshial/text-normalization。它也許適合你。

回答

16

同樣在NLTK規範中,很多(子)任務都是使用純粹的python methods解決的。

a)將除去標點符號

text='She? Hm, why not!' 
puncts='.?!' 
for sym in puncts: 
    text= text.replace(sym,' ') 
print text 
>> 'She Hm why not ' 

Ç數字轉換成字

這裏所有字母到小寫或大寫

text='aiUOd' 
print text.lower() 
>> 'aiuod' 
print text.upper() 
>> 'AIUOD' 

b))的,寫一篇文章可不是那麼簡單少數客戶,但是現在有很多已經存在的解決方案,如果你google的話。Code snippetslibraries

d)去除重音符號和其他變音符號

查找點B),剛剛創建變音符號列表作爲puncts

五)擴大縮寫

創建縮寫詞典:

text='USA and GB are ...' 
abbrevs={'USA':'United States','GB':'Great Britain'} 
for abbrev in abbrevs: 
    text= text.replace(abbrev,abbrevs[abbrev]) 
print text 
>> 'United States and Great Britain are ...' 

f)移除停止詞或 「太常見的」 字

創建停用詞列表:

text='Mary had a little lamb' 
temp_corpus=text.split(' ') 
stops=['a','the','had'] 
corpus=[token for token in temp_corpus if token not in stops] 
print corpus 
>> ['Mary', 'little', 'lamb'] 

克)文本規範化(腫瘤=腫瘤,它是=它是)

用於腫瘤 - >腫瘤使用regex

最後但並非最不重要的,請注意,上述所有示例通常都需要在真實的textes上進行校準,我將它們作爲發展的方向。

+3

由於我認爲NLP工具包,它應該能夠執行所有可能涉及一些語言數據的處理操作。這意味着我認爲我仍然認爲nltk已經有了相同字詞的詞典,縮寫字典,規範化字典,轉換爲文本數字,**日期**,溫度,**貨幣等等......也許我們只是不太瞭解? – soshial 2012-02-13 16:41:16

+1

我相信你不能只用'.lower()'和'.upper()'來解決一般情況下的casemapping。考慮土耳其語'I' ='ı','İ'='i';德語'ß'='SS';希臘語'Σ'='ς'和'σ'。 – hippietrail 2013-05-12 08:38:17

+0

解析縮寫是有風險的。你怎麼知道'美國'代表'美國'? '你和我:美國!' - >'你和我:美國!' – 2015-10-09 17:37:58

0

我建議使用stopword.words()來消除停用詞。支持以下語言:丹麥語,荷蘭語,英語,法語,德語,意大利語,挪威語,葡萄牙語,俄語,西班牙語,瑞典語。

0

我可能會晚一點,但這可能會有幫助。以下是一些語言(英語,法語,德語,芬蘭語,匈牙利語,土耳其語,俄語,捷克語,希臘語,阿拉伯語,中文,日語,韓語,加泰羅尼亞語,波蘭語,希伯來語,挪威語,瑞典語,意大利語,葡萄牙語和西班牙語的停用詞): https://pypi.python.org/pypi/many-stop-words

相關問題