2016-05-15 60 views
-1

我有一个名称列表,我正在使用NLTK到POS标签。我将它与wordsegment一起使用,因为名称混乱起来像thisismeNLTK POS标签提取,尝试过的键,值,但还没有

所以我成功使用循环POS标记这些名称,但是,我无法提取POS标记。整个练习都是从CSV完成的。

这就是我希望CSV在一天结束时看起来像。

name, length, pos 
thisisyou 6  NN, ADJ 

到目前为止我的代码是

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() 

我得到这样的结果

NN 
NN 
ADJ 
NN 

这似乎是确定的,但它是错误的。一些POS标签不应该放在新的一行上。它应该只是像NNNN混杂。

回答

0

print函数每次使用时都会插入一个换行符。你需要避免这一点。试着这样说:

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) 

join()方法返回POS标签作为一个单一的字符串,", "分离。我刚刚写了LENGTH,因为我不知道如何在您的示例中获得6。填写你的意思。

PS。在这里你不需要它,但你可以告诉print()不要添加这样的最终换行符:print(word, end=" ")

+0

感谢亚历克西斯,它工作完美。我应该在几个小时前要求帮忙。 – user970155

+0

能否请你解释一下发生了什么(t表示w,t在postagged中),谢谢 – user970155

+0

这是一个[“生成器表达式”](https://docs.python.org/3.5/tutorial/classes.html#generator-expressions ),并传递'join()'等价于一个字符串列表。另请参阅[list comprehension](https://docs.python.org/2/tutorial/datastructures.html#list-comprehensions)。 – alexis