我是自然语言流程的新手,所以如果我的问题不清楚,我会道歉。我已经阅读了一两本关于这个主题的书,并对各种图书馆进行了一般性研究,以确定我应该如何做到这一点,但我还不知道该怎么做。
我正在尝试应用程序的想法,其中一部分是试图在非结构化文本(例如推文,Facebook帖子,电子邮件,网站等)中实时查找产品提及。我不会进入产品的内容,但可以假设它们是已知的(存储在文件或数据库中)。一些例子:
所以基本上,给定一段文字,查询文本以查看它是否提及产品并获得一些提示产品的指示(布尔或置信号)。
我有些担心:
我真的不知道从哪里开始,但任何帮助都会受到赞赏。我已经看过NLTK和SciKit了,并没有真正从那里开始如何做到这一点。如果你知道解释这一点的例子或论文,链接会有所帮助。我此时并不特定于任何语言。 Java最好是Python和Scala。
答案 0 :(得分:3)
您选择的答案并非真正回答您的问题。
您可以采用的最佳方法是使用命名实体识别器(NER)和POS标记器(抓取NNP / NNPS;专有名词)。数据库中可能缺少像Lyft(优步的竞争对手)这样的新品牌,但是如果没有开发自己的道具数据库,斯坦福标签将解决您的一半需求。
如果你有时间,我会建立一个包含每个品牌名称的字典,并简单地从推文字符串中提取它。 http://www.namedevelopment.com/brand-names.html 如果你知道如何抓取,那么解决它并不是一个难题。
答案 1 :(得分:1)
您的目标似乎是将给定文本中的语言形式分类为对语义实体的引用(可以通过许多不同的语言形式引用)。您描述了为获得良好结果而应该完成的一些子任务,但它们仍然是独立的任务。
为了处理潜在的拼写错误,您需要将这些可能的拼写错误与其规范(即正确)形式相关联。
misspelling → canonical_form
映射。这适用于上述方法无法处理的“例外”。Mustang 汽车和Mustang the horse是相同的形式但是指的是完全不同的实体(或者更确切地说是实体类,如果你想要迂腐) 。事实上,除非我们也知道单词的上下文,否则我们自己作为人类无法分辨哪一个意味着什么。对这种情境进行建模的一种广泛使用的方法是distributional lexical semantics:将一个单词与另一个单词的语义相似度定义为它们的词汇上下文的相似性,即它们在文本中前后的单词。
如上所述,任何给定的语义实体都可以通过多种不同方式引用:浴室,洗手间,洗手间,< em>厕所,抽水马桶, WC , loo ,小男孩/女孩的房间对于像这样的通用实体的简单含义,它们通常可以被认为是变体拼写,与“常见拼写错误”相同,并且可以映射到“规范”带有清单的表格。对于诸如宝座室之类的模糊引用,也可以包括其他度量(例如词法 - 分布方法)以消除含义的歧义,因此您不需要例如我刚刚进入宝座室!到白金汉宫的宝座室很漂亮。
你有很多工作要做,以便到达你想去的地方,但这都是有趣的东西,并且已经有很好的库可用于完成大部分这些任务。