我正在使用的词汇:
nounphrase - 一个短语,指的是特定的人,地点或想法。不同的名词短语的例子包括“巴拉克奥巴马”,“奥巴马”,“水瓶”,“黄石国家公园”,“谷歌Chrome浏览器”等。
category - 定义哪个名词形式属于哪个,哪些不属于哪个的语义概念。类别的例子包括“政治家”,“家庭用品”,“食物”,“人物”,“运动队”等。因此,我们希望“巴拉克奥巴马”属于“政治家”和“人民”,但是不属于“食品”或“运动队”。
我有一个非常大的未标记的NLP数据集,由数百万个名词短语组成。我想用Freebase标记这些名词短语。我有Freebase类型到我自己的类别的映射。我需要做的是下载我拥有的每个Freebase类型的每个示例。
我面临的问题是需要弄清楚如何构建这种类型的查询。在高层次上,查询应该询问Freebase“主题XX的所有示例是什么?”和Freebase应该回答“这里是主题XX的所有示例的列表。”如果有人能给我这个查询的语法,我将非常感激。如果它可以在Python中完成,那将是非常棒的:)
答案 0 :(得分:4)
查询的基本形式(例如,对于某个人)是
[{
"type":"/people/person",
"name":None,
"/common/topic/alias":[],
"limit":100
}]
http://wiki.freebase.com/wiki/MQL_Manual
提供了相关文档使用Python库http://code.google.com/p/freebase-python/中的freebase.mqlreaditer()是循环所有这些的最简单方法。在这种情况下,“limit”子句确定用于查询的块大小,但是您将在API级别单独获得每个结果。
顺便说一下,你打算如何消除总统杰克肯尼迪,足球运动员,书籍等等人的歧义http://www.freebase.com/search?limit=30&start=0&query=jack+kennedy你可能想要考虑从Freebase获取更多信息(出生和放大) ;死亡日期,书籍作者,指定的其他类型等)如果你有足够的背景能够用它来消除歧义。过去某一点,使用批量数据转储而不是API http://wiki.freebase.com/wiki/Data_dumps
工作可能更容易和/或更有效率编辑 - 这是一个有效的Python程序,假设你在名为'types.txt'的文件中有一个类型ID列表:
import freebase
f = file('types.txt')
for t in f:
t=t.strip()
q = [{'type':t,
'mid':None,
'name':None,
'/common/topic/alias':[],
'limit':500,
}]
for r in freebase.mqlreaditer(q):
print '\t'.join([t,r['mid'],r['name']]+r['/common/topic/alias'])
f.close()
如果你使查询更加复杂,你可能希望降低限制以防止运行超时,但对于这样的简单查询,将限制提高到默认值100以上将使其更有效率查询更大的块。
答案 1 :(得分:1)
此处描述的一般问题在自然语言处理中称为实体链接。
毫不掩饰的自我插件:
请参阅我们关于该主题的书籍章节,以及执行大规模实体链接的方法。
http://cs.jhu.edu/~delip/entity_linking.pdf
@deliprao