我用scrapy爬了几个欺负论坛,并将结果用作字典。
我现在想做的是提取句子的关键字,例如He harassed me in the chat
,它会给关键字Harassed
和chat
,并将这些关键字与我的单词词典进行比较,并为其分配一个相关性值(在这种情况下,显然会提供一个高值,接近1.0,因为它与欺凌极为相关)。
我已经将关键字提取功能降低了,所以现在我只需要知道如何进行比较即可。
我看过使用pandas
,scikit
和nltk
的情况,但是它们似乎最适合具有多个字段的字典,而我只有一小袋单词。
那里有一些NLP库可以帮我吗?如果没有,那么解决这个问题的最佳方法是什么?
答案 0 :(得分:1)
据我了解您的问题,我认为计算语义相似性度量是您正在寻找的解决方案。语义相似度是根据单词(或其他语言单元)的含义相似度(您实际上可以称其为相关性)来报告单词之间的距离的标量值。例如。对于单词harassment
和bullying
,该值将很高,而对于单词harassment
和programming
,则该值将低。
有多种计算语义相似度的方法。基于WordNet
图结构中距离的最简单的方法之一。它在NLTK
中实现。在NLTK documentation上可以找到一些玩具示例。
基于机器学习和语料统计的更有效的方法称为分布语义模型(Word2Vec
是最普遍的一种)。它们用实值向量表示单词,并计算单词之间的相似度作为相应向量之间的距离。安装gensim
,下载一个预先训练的分布语义模型(例如,从here),您将能够计算单词的相似度值(gensim documentation应该会有所帮助)。>
最后,如果您能够计算成对单词的相似度值,则可以在搜索字典时为相似度值设置启发式阈值。如果句子中某个悬浮词的相似度低于词典中所有词的阈值,那么可能与骚扰无关。您还可以尝试其他措施,例如将字典中的单词向量视为一个簇,并计算与簇质心的相似度。