2016-08-23 1 views
-6

Ich brauche eine Python-Bibliothek, die Text akzeptiert und Telefonnummern, Namen usw. durch Token ersetzt. Beispiel:eine Python-Bibliothek, die Text akzeptiert und Telefonnummern, Namen usw. durch Token ersetzt

Eingabe: Bitte rufen Sie Robert unter 0430013454 an, um dies weiter zu besprechen.

Ausgabe: Bitte rufen Sie NAME auf PHONE, um dies weiter zu diskutieren.

Mit anderen Worten, ich muss einen Satz, einen Satz nehmen, dann wird das Programm auf diesen Satz ausgeführt und entfernen Sie alles, was wie ein Name, Telefonnummer oder eine andere Kennung aussieht, und ersetzen Sie es mit einem Token IE NAME, TELEFONNUMMER So dass Token nur Text wäre, um die Informationen zu ersetzen, so dass es nicht mehr angezeigt wird.

Muss Python 2.7 kompatibel sein. Würde jemand wissen, wie das gemacht würde?

Prost!

+0

Sie etwas präziser sein kann? Ich verstehe es nicht wirklich. Möchten Sie nur den Namen und die Nummer durch '''' ersetzen? Was meinst du mit "Tokens"? – Harrison

+0

Wer würde so eine off-top Frage stellen? – John3136

+0

Bitte lesen Sie http://stackoverflow.com/help/how-to-ask, bevor Sie nachfragen. – AJPennster

Antwort

0

Nicht wirklich sicher über die Namenserkennung. Wenn Sie jedoch die Namen kennen, nach denen Sie suchen würden, wäre es einfach. Sie könnten eine Liste aller gesuchten Namen haben und prüfen, ob sie in der Zeichenfolge enthalten sind. Wenn ja, verwenden Sie einfach string.replace. Wenn die Namen zufällig sind, könntest du vielleicht in NLTK schauen, ich denke, dass sie eine Namens-Entity-Erkennung haben könnten. Ich weiß wirklich nichts darüber aber ...

Aber wie für Telefonnummern, das ist einfach. Sie können die Zeichenfolge in eine Liste aufteilen und prüfen, ob ein Element aus Zahlen besteht. Sie könnten sogar die Länge überprüfen, um sicherzustellen, dass es 10 Ziffern ist (ich nehme an, dass alle Zahlen 10 sind, basierend auf Ihrem Beispiel).

So etwas ...

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 

Dies ist der Ausgang wäre: 'Please call Robert on PHONE to discuss this further'

Die if-Anweisung wäre so etwas wie if word.isdigit() and len(word) == 10:, wenn Sie die Länge der Ziffern 10, um sicherzustellen, wollte ist.

+0

Awesome Dank Haufen! – Matt

1

Wie Harrison darauf hingewiesen hat, hat nltk die Entity-Erkennung genannt, was Sie für diese Aufgabe benötigen. Here ist ein gutes Beispiel für den Einstieg.

Von der Website:

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) 
+0

Ehrfürchtig, das ist sehr hilfreich, danke – Matt

Verwandte Themen