2012-02-10 47 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

相关问题