【问题标题】:Identity non-English words in a column in pandas dataframe using Wordnet使用 Wordnet 在 pandas 数据框中的列中标识非英语单词
【发布时间】:2022-06-16 13:26:26
【问题描述】:

我在 pandas 数据框中有一列有数百万行。许多词是非英语的(例如来自其他语言的词或没有任何意义的词,例如“**5hjh”)。我想用 Wordnet 作为一个综合英语词典来帮助我清理这个包含列表的列。理想情况下,输出应该是一个仅包含英文单词的新列。

我已经尝试了以下代码,它是从 Stackoverflow 获得的,但它似乎无法正常工作,因为它返回一个没有任何文字的空列:

from nltk.corpus import wordnet

def check_for_word(s):
    return ' '.join(w for w in str(s).split(',') if len(wordnet.synsets(w)) > 0)

df["new_column"] = df["original_column"].apply(check_for_word)

【问题讨论】:

  • 您需要提供更多信息以便我们提供帮助,该列中的数据如何?每行只有一个单词吗?如果是这样,为什么要拆分已经是单词的字符串?
  • 您好!谢谢你的问题。该列由字符串组成,其中几个单词用逗号分隔。例如:第一行:[mr, ugo, sacchetti, october, jack, d];第二行:[36200,itt,world,communications,inc]。我只想将英文单词保存为新列中用逗号分隔的字符串
  • 你问的很重要。 spaghettipastapizza 是英文单词。 naïve 也是如此。您无法从单个字母中检测到“英语”单词。至少您需要一本字典(就像在真正的字典中一样,而不是 Dictionary`,即使那样,您也无法确定。
  • 对不起,实际上这些行是列表。
  • This similar question 有很多使用 langdetect、langid 或 NLTK 等软件包的答案。

标签: python pandas wordnet


【解决方案1】:

这个表达式 str(s).split(',') 创建一个字符串列表,其中包含空格作为除第一个单词之外的所有单词的第一个字符(假设 str(s) 按预期工作)。当你这样做时: wordnet.synsets(w) 你基本上会查找 w ,它的第一个字符是空格,但它不存在,所以所有的同义词的长度都是 0。

例如len(wordnet.synsets('october')) 将为零。

我建议调试到

  1. 检查 str(s) 是否确实创建了正确的字符串并
  2. 确保您的“w”实际上是单词(例如,不要以空格开头)。

如果您提供 df 和该 df 的输出屏幕截图,则更容易查明问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 2019-10-26
    • 1970-01-01
    • 1970-01-01
    • 2021-10-13
    • 2019-02-23
    相关资源
    最近更新 更多