我想了解用户的serarh术语。想想有人正在寻找“纽约的主食” - 我想了解它的位置搜索关键词是主食和位置是纽约。同样,如果有人输入“cat in hat”,解析器也不应将其标记为位置搜索,此处整个关键字为“cat in hat”。 是否有任何算法或开源库可用于解析搜索词并理解其比较(如A vs B)或其基于位置的搜索(如X中的A)?
答案 0 :(得分:3)
您描述的问题称为information extraction。存在许多算法,最简单的是正则表达式匹配,最好的结构化机器学习。如果您了解Python,请首先尝试使用regexp并查看NLTK之类的内容。
如果您的程序知道“NY”是一个位置,则可以区分“纽约州的主食”和“帽子里的猫”。您可以通过大写字母或因为“NY”出现在名为gazetteer的列表中。
一般来说问题是AI-complete,所以如果你想要好的结果,那么期望付出很多努力。
答案 1 :(得分:1)
你应该在GATE和http://code.google.com/p/graph-expression/这样的语法中写出这样的语言规则。 例子: Token + in(LocationLookup)。
答案 2 :(得分:0)
根据我的解析经验,不太确定但有两种方法 -
定义一个可以解析表达式并收集值/参数的语法。您可能想要提供关键字词典,然后使用该词典推断出搜索类型。
在定义语法时要严格,以便表达式本身告诉您搜索的类型。 例如LOC:A在B中,VALUE $到欧元。等
对于解析器,请参阅ANTLR / jcup& JFLEX。