Lucene或Python:选择两者";希拉里·克林顿;及;“希拉里·克林顿”;姓名条目
假设我有一些自由格式的姓名条目,其中一些是“姓,名”格式的,其他的是“姓,名”(例如“Bob MacDonald”和“MacDonald.Bob”都存在)Lucene或Python:选择两者";希拉里·克林顿;及;“希拉里·克林顿”;姓名条目,python,regex,neo4j,lucene,Python,Regex,Neo4j,Lucene,假设我有一些自由格式的姓名条目,其中一些是“姓,名”格式的,其他的是“姓,名”(例如“Bob MacDonald”和“MacDonald.Bob”都存在) 据我所知,Lucene索引不允许在句子的开头使用通配符,所以我可以通过什么方式找到两者。这是针对neo4j和py2neo的,因此欢迎使用lucene模式匹配或python正则表达式匹配的解决方案。您可以使用或吗“Hilary Clinton”或“Clinton,Hilary”?我不熟悉neo4j或lucene,但我想我会提供一个Python正
据我所知,Lucene索引不允许在句子的开头使用通配符,所以我可以通过什么方式找到两者。这是针对neo4j和py2neo的,因此欢迎使用lucene模式匹配或python正则表达式匹配的解决方案。您可以使用
或吗<代码>“Hilary Clinton”或“Clinton,Hilary”
?我不熟悉neo4j或lucene,但我想我会提供一个Python正则表达式解决方案,我刚才在这个问题上找到了这个解决方案:
基本上,你可以调整他的答案以适应这个特殊的问题:你需要一个名字和一个姓氏,但你不知道顺序。它们可能在字符串中有空格或逗号
这是我想出的正则表达式:(?:\s?Hilary()|\s?Clinton(),?){2}
它测试名字前面是否有空格,姓氏前面是否有空格,后面是否有逗号。后面的空括号表示如果满足条件,它将返回匹配,{2}表示它需要两个匹配项(名字和姓氏)
用python测试它:
import re
t1 = 'Hilary Clinton'
t2 = 'Clinton, Hilary'
re.search(r'(?:\s?Hilary()|\s?Clinton(),?){2}', t1)
re.search(r'(?:\s?Hilary()|\s?Clinton(),?){2}', t2)
双方都返回一个匹配。希望这有帮助。所以。。。为什么不做两个查询呢?因为我正在构建一个通用的查询,我希望人们能有一个干净的第一眼。我在Lucene中看到了这一点,但它似乎不适用于neo4j查询。我试着这样做:start n=node:node_auto_index(“Name:Hilary Clinton”或“Name:Clinton,Hilary”)返回n;不知道如何正确地转义它,但它是正确的,但是您必须将或
放在引号内。类似于“姓名:'Hilary Clinton'或姓名:'Hilary Clinton'”