在文档中查找有意义的单词对的Python工具

2024-03-28 13:16:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在写一个程序,从Twitter收集tweets,并对文本进行评估,以找到趋势话题。我正计划使用NLTK来终止这些术语,并对数据执行一些其他操作。在

我需要的是一个工具,可以确定tweet中相邻的两个单词是否应该作为一个单独的词来处理。例如,如果“假新闻”在Twitter上流行,我不想把这两个词区别对待。另一个例子是,如果每个人都在推特上谈论“计算机科学”,那么将计算机和科学视为两个不同的术语是没有意义的,因为它们指的是同一个主题。是否存在可以找到此类术语的工具?在


Tags: 工具数据文本程序twitter单词趋势tweets
3条回答

你需要的是一个名为“bigram”的数据集,它将给出给定语言中给定的一对词在一起出现的频率(即频率)。频率越高,对就越有可能是一个术语。在

例如,请查看COCA中可搜索和可下载的语料库。谷歌也有类似的数据集。有3克和4克,一般称为n-grams。在

在COCA数据集中,计算机科学的频率等级为1604;假新闻有828个,苹果汽车有2个。所以你需要决定阈值频率来接受一个词对。在

有意思的问题是,假设还没有一个你可以利用的有意义的复合词词典。我也希望“计算机科学”成为一个流行的话题。在

让我们采取这样一种方法,即我们对英语中的复合词一无所知,即“停止符号”与“停止”和“符号”是否有着同样重要的区别 “does better”来自“does”和“better”

分解后,您需要构建一个流程:

  1. 识别同位置对
  2. 删除任何明显不相关的复合词(如词性、专有名称或标点符号)
  3. 保存候选对
  4. 分析候选对的频率
  5. 教导系统查找最有价值的候选对

这是准确的描述吗? 如果是这样,我想你要的工具应该在(4)或(5)中。对于4),首先考虑Python的Orange库中的关联规则。你也可以使用scikit-learn的TF-IDF。对于5),您可以将4)中的输出公开为带计数的字符串列表、集合或字典。在

您可以定义一组特殊组合,并在标记化之前预处理短语:

import nltk

def preprocess_text(original_text):
    specials = {"computer vision": "computer_vision",
                "fake news": "fake_news"}
    out = original_text.lower()
    for k in specials:
        out = out.replace(k, specials[k])
    return out

def main():
    txt = preprocess_text("Computer vision has nothing to do wiht fake news")
    tokens = nltk.word_tokenize(txt)
    nltk.FreqDist(tokens).tabulate()


if __name__ == "__main__":
    main()

不过,最好有一个专门的标记化。在

相关问题 更多 >