python Jython天真的方法,用于根据名字列表检测OpenRefine中的潜在人名

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python Jython天真的方法,用于根据名字列表检测OpenRefine中的潜在人名相关的知识,希望对你有一定的参考价值。

from unidecode import unidecode

with open(r"C:\Users\Boulot\Desktop\prenoms.txt", 'r') as f:
    prenoms = [name.strip().lower() for name in f]

CHARS = "abcdefghijklmnopqrstuvwxyzéèàçüûùABCDEFGHIJKLMNOPQRSTUVWXYZ- "

family_joint = ["d'", "de", "du", "der", "den", "vander", "vanden", "van", "le"]

#TEST
value = "mexico pierre françois van pip test"

valeurs = "".join(unidecode(c.lower()) for c in value if c in CHARS).strip().split(' ')
liste = []

if len(valeurs) > 1:
    for i, token in enumerate(valeurs):
        if token in prenoms:
            liste.append(token)
            try:
                liste.append(valeurs[i + 1])
                if valeurs[i + 1] in family_joint and valeurs[i + 2] not in liste:
                    liste.append(valeurs[i + 2])
                    if valeurs[i + 2] in family_joint and valeurs[i + 3] not in liste:
                        liste.append(valeurs[i + 3])
            except IndexError:
                try:
                    if valeurs[i - 1] not in liste:
                        liste.insert(1, valeurs[i - 1])
                        if valeurs[i - 2] in family_joint and valeurs[i - 2] not in liste:
                            liste.insert(1, valeurs[i - 2])
                        if valeurs[i - 3] in family_joint and valeurs[i - 3] not in liste:
                            liste.insert(1, valeurs[i - 3])
                except IndexError:
                    pass

#liste dédoublonnée
seen = set()
seen_add = seen.add
liste = [x for x in liste if not (x in seen or seen_add(x))]
print(" ".join(liste))

以上是关于python Jython天真的方法,用于根据名字列表检测OpenRefine中的潜在人名的主要内容,如果未能解决你的问题,请参考以下文章

Pydev 显示用于 Jython 代码分析的“未定义变量”

Java集成Jython及动态执行指定脚本

Java集成Jython及动态执行指定脚本

Jython 或 python 2.7 比传统字符串连接更好的字符串连接方法

java调用python问题

在 Java 中调用 Python?