NLTK Brill Tagger分裂词

时间:2015-08-19 21:39:06

标签: python nltk pos-tagger

我正在使用python版本3.4.1和NLTK版本3,我正在尝试使用他们的Brill Tagger。

以下是brill tagger的培训代码:

[('H', 'NN'), ('i', 'NN'), (' ', 'NN'), ('I', 'NN'), (' ', 'NN'), ('a', 'AT'), ('m', 'NN'), (' ', 'NN'), ('H', 'NN'), ('a', 'AT'), ('r', 'NN'), ('r', 'NN'), ('y', 'NN'), (' ', 'NN'), ('P', 'NN'), ('o', 'NN'), ('t', 'NN'), ('t', 'NN'), ('e', 'NN'), ('r', 'NN'), ('.', '.')]

最后一个命令的输出是:

data= pd.read_csv("data.csv")
data=pd.DataFrame(data)
data=data.set_index("Time")
#print(data)
cluster_numbers=2
list_of_cluster=[]
for k,v in data.iteritems():
   temp=KMeans(n_clusters=cluster_numbers)
   temp.fit(data[k])
   print(k)
   print("predicted",temp.predict(data[k]))
   list_of_cluster.append(temp.predict(data[k]))

如何阻止它将单词拆分为字母并标记字母而不是单词?

1 个答案:

答案 0 :(得分:0)

标记tag()函数需要一个标记列表作为输入。 由于您将字符串作为输入,因此该字符串将被解释为列表。 将字符串转换为列表会为您提供字符列表:

>>> list("abc")
['a', 'b', 'c']

您需要做的就是在标记之前将字符串转换为标记列表。例如,使用nltk或仅使用空格分割:

>>> import nltk
>>> nltk.word_tokenize("Hi I am Harry Potter.")
['Hi', 'I', 'am', 'Harry', 'Potter', '.']
>>> "Hi I am Harry Potter.".split(' ')
['Hi', 'I', 'am', 'Harry', 'Potter.']

在标记中添加标记化会产生以下结果:

print(tagger.tag(nltk.word_tokenize("Hi I am Harry Potter.")))
[('Hi', 'NN'), ('I', 'PPSS'), ('am', 'VB'), ('Harry', 'NN'), ('Potter', 'NN'), ('.', '.')]