2016-05-15 37 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