如何判断一段文字是否提到了产品

How to determine if a piece of text mentions a product

我是自然语言处理的新手,所以如果我的问题不清楚,我深表歉意。我已经阅读了一两本关于这个主题的书,并对各种图书馆进行了一般性研究,以弄清楚我应该如何做这件事,但我还不确定我知道该怎么做。

我正在研究一个应用程序的想法,其中一部分是尝试在非结构化文本(例如推文、Facebook 帖子、电子邮件、网站等)中实时查找产品提及。我不会深入探讨这些产品是什么,但可以假设它们是已知的(存储在文件或数据库中)。一些例子:

所以基本上,给定一段文本,查询该文本以查看它是否提到了产品,并收到它确实提到该产品的一些指示(布尔值或置信度数)。

我的一些顾虑是:

我真的不知道从哪里开始,但我们将不胜感激。我已经看过 NLTK 和 SciKit,并没有真正了解如何从那里做到这一点。如果您知道解释这一点的示例或论文,链接会很有帮助。在这一点上,我并不特定于任何语言。 Java 最好,但 Python 和 Scala 是可以接受的。

您的目标似乎是将给定文本中的语言形式分类为对语义实体的引用(可以参考由许多不同的语言形式)。你描述了一些为了获得好的结果应该完成的子任务,但它们仍然是独立的任务。

拼写错误

为了处理单词的潜在拼写错误,您需要将这些可能的拼写错误与其规范(即正确)形式相关联。

  • Phonetic similarity: Many reasons for "misspellings" is opacity in the relationship between the word's phonetic form (i.e. how it sounds) and its orthographic form (i.e. how it's spelled). Therefore, a good way to address this is to index terms phonetically 这样例如innovashuninnovation 有关。
  • Form similarity: Additionally, you could do a string similarity check, but you may introduce a lot of noise into your results which you would have to address because many distinct words are in fact very similar (e.g. chic vs. chick). You could make this a bit smarter by first morphologically analyzing the word and then using a tree kernel 代替。
  • 手工制作的映射:您也可以简单地制作一个常用 misspelling → canonical_form 映射的列表。这适用于未被上述方法处理的 "exceptions"。

Word-sense disambiguation

Mustang the car and Mustang the horse are the same form but refer to entirely different entities (or rather classes of entities, if you want to be pedantic). In fact, we ourselves as humans can't tell which one is meant unless we also know the word's context. One widely-used way of modelling this context is distributional lexical semantics:将一个词与另一个词的语义相似性定义为其词汇上下文的相似性,即在文本中位于它们之前和之后的词。

Linguistic aliases (synonyms)

如上所述,任何给定的语义实体都可以用多种不同的方式指代:bathroomwashroom洗手间, 厕所, 抽水马桶, 厕所, loolittle boys'/girls' roomthrone room 等。为了简单的含义,指的是像这样的通用实体, 它们通常可以被认为是变体拼写,就像 "common misspellings" 一样,并且可以映射到带有列表的 "canonical" 形式。对于模棱两可的引用,例如 throne room,其他指标(例如词汇分布方法)也可以包括在内,以消除歧义,这样您就不会关联,例如我刚才在王座室!白金汉宫的王座室很漂亮

结论

为了到达你想去的地方,你有很多工作要做,但这些都是有趣的东西,而且已经有很好的库可用于完成这些任务中的大部分。

您选择的答案并未真正回答您的问题。

您可以采用的最佳方法是使用命名实体识别器 (NER) 和词性标注器(抓取 NNP/NNPS;专有名词)。那里的数据库可能缺少一些新品牌,例如 Lyft(Uber 的竞争对手),但无需开发您自己的 prop 数据库,Stanford tagger 将解决您一半的即时需求。

如果你有时间,我会建立一个包含每个品牌名称的字典,然后简单地从推文字符串中提取它。 http://www.namedevelopment.com/brand-names.html 如果你知道如何爬行,这不是一个很难解决的问题。