如何从字符串中提取非英语地址

How to extract a non-English address from a string

提问人:Tavlin 提问时间:2/8/2023 最后编辑:Pawel KamTavlin 更新时间:3/1/2023 访问量:119

问:

如果这里有人知道一个 python 库,该库只能从整个消息中提取土耳其的地址(文本最初是土耳其语),那将是一个很大的帮助。

一个翻译的例子是:

“嗨,我叫塞勒姆,我有关于坠机现场的信息 .....(地址在这里),非常感谢。

我试着在网上寻找,但没有找到一个在土耳其地址上有功能的库,只有一些针对美国的 NLP 项目。 输入为纯文本。我已经将其翻译成英文,但我不知道如何从整封邮件中具体提取地址。

python nlp 街道地址 pii

评论

0赞 Pawel Kam 2/8/2023
很难找到土耳其语的预制 PII 识别库。我建议先将文本翻译成英文,然后再搜索地址。文本的输入格式是什么?是PDF并且首先需要字符识别,还是例如普通的.txt文件?
0赞 Tavlin 2/8/2023
@PawelKam 输入是纯文本,我已经将其翻译成英语,但我认为普通的地址库无法处理它,因为我的思维方式是土耳其语地址的格式与其他地址不同。
0赞 Tavlin 2/8/2023
@СергейКох 当然 (:

答:

0赞 Pawel Kam 2/9/2023 #1

您正在寻找个人身份信息 (PII) 检测软件

这个领域有很多开源库,尽管我不知道其中哪一个(如果有的话)适合处理你的用例。另一个需要考虑的问题是,您希望在配置和编写其他软件上花费多少时间。值得先检查一下它们,因为它们在许可证规定范围内是免费的。

接下来,您应该考虑使用付费软件进行 PII 检测。有很多这样的产品。您可能应该搜索专注于处理土耳其语地址名称的软件,这些名称对于某些工具来说可能过于具体。我是 AWS 人,所以我使用 Amazon Comprehend,但也有其他解决方案,例如用于语言的 Azure 认知服务等。请在下面找到一个示例,说明如何使用 Amazon Comprehend detect_pii_entities API 实现这一点。

import boto3
from botocore.exceptions import ClientError

client = boto3.client('comprehend')
text =  'Hi, my name is Salem and I have information " \
"about a crash site at Sultan Ahmet, Ayasofya Meydanı No:1, 34122 Fatih/İstanbul, Turkey, Many Thanks.'

try:
    response = client.detect_pii_entities(Text=text, LanguageCode='en')
    entities = response['Entities']
except ClientError:
    entities = [] # no PII entities detected

在 API 响应中,您应该获得一个 JSON 对象,用于确定地址的开始和结束位置。

{
    "Entities": [
        {
            "Score": 0.9998736381530762,
            "Type": "NAME",
            "BeginOffset": 15,
            "EndOffset": 20
        },
        {
            "Score": 0.9996119737625122,
            "Type": "ADDRESS",
            "BeginOffset": 66,
            "EndOffset": 131
        }
    ]
}

例如,您可以循环访问实体,并通过原始文本中的索引获取地址。

addresses = [e for e in entities if e['Type'] == 'ADDRESS']
for a in addresses:
    print(text[a['BeginOffset']:a['EndOffset']])
    # prints "Sultan Ahmet, Ayasofya Meydanı No:1, 34122 Fatih/İstanbul, Turkey"

请注意,此特定工具是付费的,您必须在使用它之前进行身份验证。