0

人物图中,一些节点与SAME_AS关系相连。

(p1:{name:'m.Verena von Habsburg-Laufenburg'})-[SAME_AS]-(p1:{name:'2m: 9.2.1354 Verena von Habsburg-Laufenburg'})

在第一个示例中,这些人实际上是相同的,但我们还有其他示例:

(p1:{name:'m.Gf Antal Pejácsevich de Verõcze (+1838)'})-[SAME_AS]-(p2: {name:'2m: Budapest 5.7.1880 Gf Arthur Pejácsevich de Verõcze'})

是否有机会通过 apoc.text.phonetic 找到决定?

4

1 回答 1

0

你可以自己判断。

你的第一个例子

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

在这里,我将属性设置samePhonetictrue如果语音相同。

此外,还有一个名为的其他程序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 意味着您的两个字符串非常不同。

于 2018-02-13T09:50:16.183 回答