检测单词是«通用英语»单词还是俚语单词

数据挖掘 Python nlp nltk
2022-03-11 12:36:46

我有一个巨大的短语列表,例如:

sql server data analysis # SQL is not a common word
bodybuilding # common word
export opml # opml is not a common word
best ocr mac # ocr and mac are not common words

我想检测 word 是否不是常用词,不应该进一步处理。

我试图用 NLTK 来做到这一点,但它给出了奇怪的结果:

result = word in nltk.corpus.words.words()
sql = false
iso = true
mac = true

有一个更好的方法吗?

3个回答

这完全取决于您对域中常用词的定义。您使用的 NLTK 语料库可能不太适合您的领域。要么你有一个包含你想要的域的语料库,然后你做一个简单的查找。或者您事先不知道,您需要从您的文档(您的短语)中计算这些常用词。在这种情况下,你的句子越多越好。

一个简单的方法是使用纯 Python 是使用计数器

from collections import Counter

documents = [] # here add your list of documents/phrases

counter = Counter()

for doc in documents:

    words = doc.split() # assuming that words can be split on whitespaces

    counter.update(words)

counter.most_common() # this will return words ranked by their frequency

然后由您决定应用阈值来定义哪些词是常见的,哪些不是。更高级的方法可能是使用他们的 TFIDF 权重,但在这种情况下,您不必保留常用词,而是保留“重要”词。

解决此问题的一些常见方法是:

我认为瓦伦丁的回答很棒。我只是想 +1 他的评论,你似乎真的对如何找到重要的词而不是过滤不常见的词感兴趣(健美实际上可能不是很常见,但我知道即使在那种情况下它仍然与你无关任务)。

如果这个假设是正确的,我认为您实际上需要的是一个域分类器:您实际上面临一个分类问题,您希望将某些术语分类为垃圾邮件或非垃圾邮件。如果您已经有一个数据集或可以轻松创建一个数据集,您可以使用任何判别模型来做到这一点,但即使您没有,您也可以通过简单地比较短语中每个术语的两个概率来做到这一点:1)它的概率超过大文本文件与 2)它相对于您通过查询收集的较小的、特定于域的文本文件的概率。

考虑下表中的数据,其中

  1. Term是不言自明的;
  2. 列是包含 3 次提及该词的文本p(term|Computer)的概率termcomputer
  3. p(term)是所有文本中术语的概率;(注意所有文本都来自同一个来源,一个大型的原始文本数据集);
  4. columndomain association multiple是除法的结果p(term|Computer) / p(term)
  5. is_relevant是布尔值;如果 in 的值domain association multiple大于 10,则该词是相关的(=不常见);
  6. (请注意,数据集上没有出现一些单词,需要更多数据)。
    |Term | p(term|Computer) | p(term) | domain association multiple | is_relevant|
    |---|---|---|---|---|
    |server | 0.0121 | 0.0008 | 15 | 1 |
    |ocr | 0 | 0 | 0 | 0 |
    |mac | 0.0044 | 0.0002 | 21.4 | 1 |
    |best | 0.022 | 0.0124 | 1.8 | 0 |
    |data | 0.1436 | 0.023 | 6.3 | 0 |
    |analysis | 0.0362 | 0.0064 | 5.6 | 0 |
    |opml | 0 | 0 | 0 | 0|
    |sql | 0.0027 | 0.0001 | 23.9 | 1 |
    |export | 0.0016 | 0.0004 | 4.5 | 0 |
    |bodybuilding | 0 | 0 | 0 | 0|

这告诉您单词server, macandsql与 domain 相关Computer,而其余的则不相关(在 10 倍阈值处;较低的阈值可能允许analysisexport进入,但仍排除best)。