2016-05-15 11 views
-1

Ich habe eine Liste von Namen, auf denen ich NLTK zu POS-Tag verwende. Ich verwende es zusammen mit Wortsegment, da die Namen wie thisisme durcheinandergewürfelt sind.NLTK POS-Tags Extraktion, versuchte Schlüssel, Werte aber noch nicht

So habe ich erfolgreich POS diese Tage mit einer Schleife getaggt, jedoch kann ich die POS-Tags nicht extrahieren. Die gesamte Übung wurde von einer CSV gemacht.

Das ist, was die CSV am Ende des Tages aussehen soll.

name, length, pos 
thisisyou 6  NN, ADJ 

Mein Code so weit ist

import pandas as pd 
import nltk 
import wordsegment 
from wordsegment import segment 
from nltk import pos_tag, word_tokenize 
from nltk.tag.util import str2tuple 

def readdata(): 
    datafileread = pd.read_csv('data.net.lint.csv') 
    domain_names = datafileread.DOMAIN[0:5] 

    for domain_name in domain_names: 
     seg_words = segment(domain_name) 
     postagged = nltk.pos_tag(seg_words) 
     limit_names = postagged 
     for keys,values in postagged: 
      print (posttagged) 

readdata() 

Und ich bekomme dieses Ergebnis

NN 
NN 
ADJ 
NN 

Dies scheint in Ordnung, aber es ist falsch. Einige POS-Tags sollten sich nicht in einer neuen Zeile befinden. Es sollte nur wie NNNN durcheinander geworfen werden.

Antwort

0

Die Funktion print fügt jedes Mal eine neue Zeile ein, wenn Sie sie verwenden. Sie müssen dies vermeiden. Probieren Sie es wie folgt aus:

for domain_name in domain_names: 
    seg_words = segment(domain_name) 
    postagged = nltk.pos_tag(seg_words) 
    tags = ", ".join(t for w, t in postagged) 
    print(domain_name, LENGTH, tags) 

Die join() Methode gibt die POS-Tags als einzelne Zeichenfolge, getrennt mit ", ". Ich habe gerade LENGTH geschrieben, da ich keine Ahnung habe, wie Sie die 6 in Ihrem Beispiel bekommen haben. Gib ein, was immer du meintest.

PS. Sie brauchen es hier nicht, aber Sie können print() sagen, nicht die endgültige Newline wie folgt hinzufügen: print(word, end=" ")

+0

Danke Alexis, es hat perfekt funktioniert. Ich hätte vor Stunden um Hilfe bitten sollen. – user970155

+0

Könnten Sie bitte erklären, was passiert (t für w, t in postagged), danke – user970155

+0

Es ist ein ["Generator Ausdruck"] (https://docs.python.org/3.5/tutorial/classes.html#generator-expressions) und übergibt 'join()' das Äquivalent einer Liste von Strings. Siehe auch [Listenverständnis] (https://docs.python.org/2/tutorial/datastructures.html#list-comprehensions). – alexis

Verwandte Themen