使用Python从文本中删除非英语单词

27
我正在使用Python进行数据清理练习,需要清理的文本中包含意大利语单词,我想要将它们移除。我在网上搜索了一些资料,是否可以使用nltk这样的工具包在Python中实现此操作。
例如,给定以下文本:
"Io andiamo to the beach with my amico."

我希望你能为我提供以下内容:

"to the beach with my" 

有人知道如何实现这个吗? 任何帮助都将不胜感激。

3个回答

48
你可以使用NLTK中的words语料库:
import nltk
words = set(nltk.corpus.words.words())

sent = "Io andiamo to the beach with my amico."
" ".join(w for w in nltk.wordpunct_tokenize(sent) \
         if w.lower() in words or not w.isalpha())
# 'Io to the beach with my'

很不幸,Io也是一个英文单词。通常,判断一个单词是否属于英语可能比较困难。


编辑后的文本,保留其它非语言单词(标点符号、数字等) - DYZ
1
词库中不包含复数形式。您需要先进行词形还原。 - DYZ
4
如果你看到了“Resource words not found”的提示,就需要添加一行代码:nltk.download('words') - hafiz031
嘿,但是nltk语料库中的单词并不是穷尽性的,它不包含一个单词的所有不同形式、同义词等等... :/ 它只包含235886个独特的英语单词。我试图检查单词“company”和“companies”是否都存在于这个集合中。我只发现了“company”,而没有“companies”。考虑到这一点,有没有办法通过更多的单词、不同形式和同义词来增加集合的大小?或者还有其他有效的方法吗? - user14281567
@sachinkimars 在查找语料库中的单词之前,您可以进行词形还原。 - DYZ
显示剩余2条评论

5

在MAC OSX中,如果您尝试这段代码仍然可能会显示异常。因此,请确保手动下载单词语料库。一旦您 import 您的 nltk 库,请注意在mac os中它不会自动下载单词语料库。因此,您必须潜在地下载它,否则您将面临异常。

import nltk 
nltk.download('words')
words = set(nltk.corpus.words.words())

现在,您可以执行与上一个人指示的相同操作。
sent = "Io andiamo to the beach with my amico."
sent = " ".join(w for w in nltk.wordpunct_tokenize(sent) if w.lower() in words or not w.isalpha())

根据NLTK文档,它没有这样说。但是我在github上收到了问题,并以这种方式解决了它,它确实有效。如果您不在那里放置word参数,您的OSX可能会反复记录和发生。

嘿,但是nltk语料库中的单词并不是穷尽性的,它不包含一个单词的所有不同形式、同义词等等... :/ 它只包含235886个独特的英语单词。我试图检查单词“company”和“companies”是否都存在于这个集合中。我只发现了“company”,而没有“companies”。考虑到这一点,有没有办法通过更多的单词、不同形式和同义词来增加集合的大小?或者还有其他有效的方法吗? - user14281567
这就是词干处理发挥作用的地方。您可以使用NLTK将单词还原为其词根。例如 ['cared','caring','careful'] 都可归纳为 care。您可以检查SnowballStemmer。 - Temitope Babatola

-1
from nltk.stem.snowball import SnowballStemmer

snow_stemmer = SnowballStemmer(language='english')
  
#list of words
words = ['cared', 'caring', 'careful']
  
#stem of each word
stem_words = []
for w in words:
    x = snow_stemmer.stem(w)
    stem_words.append(x)
      
#stemming results
for w1,s1 in zip(words,stem_words):
    print(w1+' ----> '+s1)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接