2016-04-18 9 views
2

ich meinen Text so bearbeiten möchten:Python - Gruppe Sequential Array Mitglieder

arr = [] 
# arr is full of tokenized words from my text 

Zum Beispiel:

"Abraham Lincoln Hotel is very beautiful place and i want to go there with 
Barbara Palvin. Also there are stores like Adidas ,Nike , Reebok." 

Edit: Grundsätzlich möchte ich durch die Verwendung istitle Eigennamen und Gruppen sie erkennen() und isAlpha() in für statement wie:

for i in arr: 
    if arr[i].istitle() and arr[i].isAlpha 

In dem Beispiel arr bis zum nächsten Wort hat nicht sein erstes Brief Großbuchstaben.

arr[0] + arr[1] + arr[2] = arr[0] 
#Abraham Lincoln Hotel 

Das ist, was ich mit meinem neuen arr will:

['Abraham Lincoln Hotel'] is very beautiful place and i want to go there with['Barbara Palvin']. ['Also'] there are stores like ['Adidas'], ['Nike'],['Reebok'].

„auch“ ist für mich nicht Problem es sehr nützlich sein, wenn ich versuche, mit meinem Datensatz zu entsprechen.

+0

Mögliche Duplikat [Finding Die richtige Substantive mit NLTK WordNet] (http://stackoverflow.com/questions/17669952/finding-proper-nouns-using-nltk-wordnet) – Selcuk

+0

Ich war alized Wort gefunden Ich möchte einen einfachen Python-Code, der immer die richtigen Namen zurückgibt, ohne sie zu gruppieren, aber trotzdem danke. –

+0

Sie können einen * einfachen Python-Code * nicht verwenden, um korrekte Namen zurückzugeben. Es ist nicht so einfach und Sie müssen 'NTLK' verwenden, um es zu erstellen. –

Antwort

1

Sie könnten Tun Sie etwas wie dieses:

sentence = "Abraham Lincoln Hotel is very beautiful place and i want to go there with Barbara Palvin. Also there are stores like Adidas, Nike, Reebok." 
all_words = sentence.split() 
last_word_index = -100 
proper_nouns = [] 
for idx, word in enumerate(all_words): 
    if(word.istitle() and word.isalpha()): 
     if(last_word_index == idx-1): 
      proper_nouns[-1] = proper_nouns[-1] + " " + word 
     else: 
      proper_nouns.append(word) 
     last_word_index = idx 
print(proper_nouns) 

Dieser Code wird:

  • Split alle Worte in eine Liste
  • Iterate über alle Worte und
    • Wenn das letzte das vorherige Wort wird aktiviert Wort, wird es anhänge es bis zum letzten Eintrag in der Liste
    • sonst wird es das Wort als neuer Eintrag in der Liste speichern
    • Notieren Sie den letzten Index, dass ein Capit
+0

Diese Ausgänge '[ 'Abraham Lincoln Hotel', 'Barbara', 'auch'] ', nicht' [ 'Abraham', 'Lincoln', 'Hotel', 'Barbara', 'Palvin.', 'Adidas', 'Nike', 'Reebok.'] ' –

+0

Wörter wie" Auch "oder" Weil "werden für mich kein Problem sein, weil sie nicht mit meinen Datensätzen übereinstimmen, die voll von Organisation, Standort und Personennamen sind. Also jede Lösung wie; ['Abraham Lincoln Hotel'], ['Barbara Palvin'], ['Adidas'], '' Nike '', '' Reebok '' werden nützlich sein. Denn später sende ich ihnen gruppierte Wörter zu meinen Funktionen als Eingaben. –

+0

Der Code, den Sie geschrieben haben, tat, was ich will, aber nur für den ersten Buchstaben.Ausgabe ist: ['Abraham Lincoln Hotel', 'Barbara', 'Auch'] –

0

Ist es das, was Sie fragen?

sentence = "Abraham Lincoln Hotel is very beautiful place and i want to go there with Barbara Palvin. Also there are stores like Adidas ,Nike , Reebok." 

chars = ".!?,"         # Characters you want to remove from the words in the array 

table = chars.maketrans(chars, " " * len(chars)) # Create a table for replacing characters 
sentence = sentence.translate(table)    # Replace characters with spaces 

arr = sentence.split()       # Split the string into an array whereever a space occurs 

print(arr) 

Der Ausgang ist:

['Abraham', 
'Lincoln', 
'Hotel', 
'is', 
'very', 
'beautiful', 
'place', 
'and', 
'i', 
'want', 
'to', 
'go', 
'there', 
'with', 
'Barbara', 
'Palvin', 
'Also', 
'there', 
'are', 
'stores', 
'like', 
'Adidas', 
'Nike', 
'Reebok'] 

Hinweis zu diesem Code: jedes Zeichen, das in dem chars Variable ist, wird von den Saiten in dem Array entfernt werden. Erklärung ist im Code.

Um die nicht-Namen diese entfernen Sie einfach tun:

import string 
new_arr = [] 

for i in arr: 
    if i[0] in string.ascii_uppercase: 
     new_arr.append(i) 

Dieser Code wird auf alle Wörter enthalten, die mit einem Großbuchstaben beginnen.

Um dies zu beheben, dass Sie chars ändern müssen:

chars = "," 

und ändern Sie den obigen Code zu:

import string 
new_arr = [] 
end = ".!?"  

b = 1 
for i in arr: 
    if i[0] in string.ascii_uppercase and arr[b-1][-1] not in end: 
     new_arr.append(i) 
    b += 1 

und das wird ausgegeben:

['Abraham', 
'Lincoln', 
'Hotel', 
'Barbara', 
'Palvin.', 
'Adidas', 
'Nike', 
'Reebok.'] 
+0

Dies ist nicht der richtige Ansatz. Ich meine, es ist für das OP unmöglich, eine Liste aller Wörter zu erstellen, die * keine Eigennamen sind *. –

+0

Bearbeitet. @ArdaNalbant Sie sollten mehr Kriterien finden, die zu den Namen passen oder nicht, die Sie identifizieren müssen, damit das Programm genauer ist. – Janekmuric

+0

Die Ausgabe ist, was ich brauchte, lass mich es versuchen. Gute Arbeit hier –