你可以自己判断。
你的第一个例子
WITH [
"m.Verena von Habsburg-Laufenburg",
"2m: 9.2.1354 Verena von Habsburg-Laufenburg"
] AS texts
UNWIND texts AS text
CALL apoc.text.phonetic(text) YIELD value
RETURN text, value
结果是一样的:
text value
"m.Verena von Habsburg-Laufenburg" "M000V650V500H121L151"
"2m: 9.2.1354 Verena von Habsburg-Laufenburg" "M000V650V500H121L151"
你的第二个例子
WITH [
"m.Gf Antal Pejácsevich de Verõcze (+1838)",
"2m: Budapest 5.7.1880 Gf Arthur Pejácsevich de Verõcze"
] AS texts
UNWIND texts AS text
CALL apoc.text.phonetic(text) YIELD value
RETURN text, value
结果不一样:
text value
"m.Gf Antal Pejácsevich de Verõcze (+1838)" "M000G100A534P200C120D000V600C000"
"2m: Budapest 5.7.1880 Gf Arthur Pejácsevich de Verõcze" "M000B312G100A636P200C120D000V600C000"
结论
它适用于此示例,但我不确定您是否可以将其作为通用规则。数据沿袭实现起来很复杂,您没有任何保证可以 100% 确定。但最终,apoc.text.phonetic
可以帮助您实现目标。
更新
您的查询应该是这样的:
MATCH (n1:Person)-[r:SAME_AS]->(n2:Person)
CALL apoc.text.phonetic(n1.name) YIELD value AS n1Phonetic
CALL apoc.text.phonetic(n2.name) YIELD value AS n2Phonetic
WHERE n1Phonetic = n2Phonetic
WITH r
SET r.samePhonetic=true
在这里,我将属性设置samePhonetic
为true
如果语音相同。
此外,还有一个名为的其他程序apoc.text.phoneticDelta
可以帮助您执行此操作。有了它,您可以定义一个阈值,或直接将增量存储为您的关系的属性,如下所示:
MATCH (n1:Person)-[r:SAME_AS]->(n2:Person)
CALL apoc.text.phoneticDelta(n1.name, n2.name) YIELD delta
WITH r, delta
SET r.phoneticDelta=delta
4 分意味着你的两个字符串非常相似。分数为 0 意味着您的两个字符串非常不同。