一个python库,它接受一些文本,并用标记替换电话号码、姓名等

一个python库,它接受一些文本,并用标记替换电话号码、姓名等,python,python-2.7,pyparsing,Python,Python 2.7,Pyparsing,我需要一个python库,它接受一些文本,并用令牌替换电话号码、姓名等。例如: 输入:请致电0430013454与Robert进行进一步讨论 输出:请打电话给我的名字进一步讨论这个问题 换句话说,我需要一个句子,任何一个句子,然后程序将在这个句子上运行,删除任何看起来像姓名、电话号码或任何其他标识符的东西,并用一个标记(即姓名、电话号码)替换它,这样标记将只是一个文本来替换信息,这样它就不再显示 必须与python 2.7兼容。有人知道怎么做吗 干杯 不太清楚姓名识别。然而,如果你知道你要找的名

我需要一个python库,它接受一些文本,并用令牌替换电话号码、姓名等。例如:

输入:请致电0430013454与Robert进行进一步讨论

输出:请打电话给我的名字进一步讨论这个问题

换句话说,我需要一个句子,任何一个句子,然后程序将在这个句子上运行,删除任何看起来像姓名、电话号码或任何其他标识符的东西,并用一个标记(即姓名、电话号码)替换它,这样标记将只是一个文本来替换信息,这样它就不再显示

必须与python 2.7兼容。有人知道怎么做吗


干杯

不太清楚姓名识别。然而,如果你知道你要找的名字,那就很容易了。您可以有一个要查找的所有名称的列表,并检查每个名称是否都在字符串中,如果是,请使用
string.replace
。如果名称是随机的,你可以查看NLTK,我认为它们可能有一些名称实体识别。但是我真的什么都不知道

但至于电话号码,这很简单。您可以将字符串拆分为一个列表,并检查是否有任何元素由数字组成。您甚至可以检查长度以确保它是10位数字(根据您的示例,我假设所有数字都是10位)

像这样的

example_input = 'Please call Robert on 0430013454 to discuss this further.'

new_list = example_input.split(' ')

for word in new_list:
    if word.isdigit():
        pos = new_list.index(word)
        new_list[pos] = 'PHONE'

example_output = ' '.join(new_list)

print example_output
这将是输出:
“请打电话给罗伯特进一步讨论此事”


if语句类似于
if-word.isdigit()和len(word)==10:
如果您想确保数字的长度为10。

正如Harrison指出的,nltk已经命名了实体识别,这就是您想要用于此任务的。这是一个很好的示例,可以帮助您开始

从网站:

import nltk 

sentences = nltk.sent_tokenize(text)
tokenized_sentences =      [nltk.word_tokenize(sentence) for sentence in sentences]
tagged_sentences = [nltk.pos_tag(sentence) for sentence in tokenized_sentences]
chunked_sentences = nltk.ne_chunk_sents(tagged_sentences, binary=True)

def extract_entity_names(t):
    entity_names = []

    if hasattr(t, 'label') and t.label:
        if t.label() == 'NE':
            entity_names.append(' '.join([child[0] for child in t]))
        else:
            for child in t:
                entity_names.extend(extract_entity_names(child))

    return entity_names

entity_names = []
for tree in chunked_sentences:
    # Print results per sentence
    # print extract_entity_names(tree)

    entity_names.extend(extract_entity_names(tree))

# Print all entity names
#print entity_names

# Print unique entity names
print set(entity_names)

你能再具体一点吗?我真的不明白。您只想用
''
替换名称和号码吗?你说的“代币”是什么意思?谁会对这样一个明显偏离主题的问题进行投票?请在提问之前阅读。“等等…”所以,你想要一个能猜出你想要什么的库?对不起,我会重写上面的问题。太棒了,这非常有帮助,谢谢