2013-04-29 89 views
2

我正在处理用户在数据库中添加一些文本的项目,同时保存还会将标记添加到他/她的条目中,以便其他人可以使用这些标记进行搜索。分别使用NLP和Ontology自动标记和分类文本

例:

文字:“下一个F1比赛是在西班牙”

标签:“一级方程式”,“种族”,西班牙”

如果任何用户将这些标签搜索但我想要搜索“体育”或“汽车运动”或“欧洲”的用户也应该得到这个条目,虽然这些标签没有明确地标记到条目中,但是因为“一级方程式”是一种类型的“赛车运动”,这是一种“体育”和“西班牙”的类型在“欧洲”。

在我提交表格的那一刻,用户在一个文本框中写下他们的文本,然后将他们的标签写入下面的第二个文本框中,并提交。

这些标签稍后会由管理员手动分类。因此,在上述情况下,管理员将手动将“西班牙”作为“欧洲”的子元素。 (MS SQL Server层次结构列)

我认为这可以通过使用一些Ontologies软件来实现。 dotNetRdf,OWL ......但我不确定。我几天前才开始了解这个世界的这个方面,我不确定这些可以帮助我。这是解决方案,还是我正在考虑完全错误的东西?任何建议,以实现上述?

此外,在进行分类之前,我想自动从文本中选取标签并将其作为标签填充到较低的文本框中。

为此,我想我将不得不使用一些NLP服务?任何想法,哪一个使用,或任何其他建议?

回答

0

如果您正在寻找的关系足够一般(即国家和大洲),本体可能会有所帮助。对于“比赛”与“运动”之间的语义关联性。我会推荐一些可以利用的单词(或标签)之间的语义相似性。

基本上,如果您生成一个MxM矩阵建模不同标签之间的依赖关系/相似性,您可以使用这些权重来获得相似的概念。比如“比赛”和“运动”比“比赛”和“西班牙”更有关系。

如何计算权重?这可以通过多种技术解决,例如[显式语义分析](http://en.wikipedia.org/wiki/Explicit_semantic_analysis)或[分布语义](http://en.wikipedia.org/wiki/Distributional_semantics)技术。最简单的度量标准之一是使用一些协同度量指标(即文件“种族”和“体育”的百分比一起出现)。

此外,您还可以使用更多的NLP技术,如同义词。

你也可以将这些权重与本体论关系结合起来。如果你知道西班牙是欧洲的一部分,你可以在总体基础上增加体重。

对于提取标签,您应该查看实体提取,nltk可能是一个很好的工具。

我希望这会有所帮助。

0

在这种情况下,您正在使用的解决方案(MS SQL Server层次结构列)可以通过OWL本体(它是一个层次结构/分类法)进行补充。我给你举一个例子,说明你的情况会如何,以及你能从中得到什么。

有关体育的本体看起来像:

Class: Sport 

Class: Formula_1 
    SubClassOf: Motor_Sport 

Class: Motor_Sport 
    SubClassOf: Sport 

然后用程序的帮助称为推理你可以要求查询,如:什么是比更具体的东西Sport? (Sport的子类)

结果列表包含Motor_SportFormula_1。然后,您可以使用这些类来注释您的数据。

一个好的入门方法是看Protégé OWL Tutorial

+0

感谢您的@loopasam。是本体/分类/ NLP这个世界的初学者。你的教程网站肯定会有所帮助。我会详细介绍它。但是我想我在这里有点困惑......比如像你上面提到的那样,Motor_Sport将会成为Formula_1的一个子类。谁将首先根据Formula_1对Motor_Sports进行分类。这是否会自动发生?或者有些必须手动完成? – 2013-04-30 10:42:30

+0

“Motor_Sport”断言是“Formula_1”的超类,是手动完成的。这是做到这一点的唯一方法,这是你如何指定你的领域知识。然后,一旦建立了本体,您可以按照我的答案中的指示查询它。这样做的好处在于,您只需对信息进行一次整理,然后在其余时间利用它。一些本体已经存在,所以我建议你在构建你自己的域之前就开始对你正在寻找的域进行搜索。如果你找到适合你的人,你可以用它来解决你的问题。 – loopasam 2013-04-30 10:54:26