NLTK中有没有用于文本规范化和标准化的类?

23 投票
3 回答
24455 浏览
提问于 2025-04-17 12:45

在NLTK的文档和示例中,大部分内容都集中在词形还原和词干提取上,但关于一些规范化的内容却很少,比如:

  • 把所有字母转换成小写或大写
  • 去掉标点符号
  • 把数字转换成文字
  • 去掉重音符号和其他音标
  • 扩展缩写词
  • 去掉停用词或“太常见”的词
  • 文本标准化(比如肿瘤 = tumour,it's = it is)

请告诉我在NLTK中哪里可以找到相关内容。如果有其他语言(比如JAVA)中类似的功能也欢迎分享。谢谢。

更新:我写了一个用于文本规范化的Python库,主要是为了文本转语音的用途,链接在这里 https://github.com/soshial/text-normalization。这可能对你也有帮助。

3 个回答

2

我可能来得有点晚,但这可能对你有帮助。这里列出了一些语言的停用词(包括英语、法语、德语、芬兰语、匈牙利语、土耳其语、俄语、捷克语、希腊语、阿拉伯语、中文、日语、韩语、加泰罗尼亚语、波兰语、希伯来语、挪威语、瑞典语、意大利语、葡萄牙语和西班牙语):https://pypi.python.org/pypi/many-stop-words

2

我建议使用stopwords.words()来去除停用词。这个功能支持以下语言:丹麦语、荷兰语、英语、法语、德语、意大利语、挪威语、葡萄牙语、俄语、西班牙语和瑞典语。

23

在NLTK的说明中,很多(子)任务都是用纯Python的方法来解决的。

a) 将所有字母转换为小写或大写

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

b) 去掉标点符号

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

c) 将数字转换成文字

这里写一个简单的代码可能不太容易,但如果你在网上搜索,会发现很多现成的解决方案,比如代码片段等等。

d) 去掉重音符和其他变音符

可以参考点 b),只需创建一个包含变音符的列表,就像处理标点符号一样。

e) 扩展缩写词

创建一个包含缩写的字典:

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']

g) 文本规范化(比如 tumor = tumour, it's = it is)

对于 tumor -> tumour,可以使用正则表达式来处理。

最后,值得注意的是,上面所有的例子通常需要根据实际文本进行调整,我写这些是为了给你一个方向。

撰写回答