我有这个功能,使用NLTK从给定的文本中引用PART OF SPEECH并在用冒号替换每个单词和它的词性之间的cammas后成对压缩但我在正则表达式中有一个我无法理解的错误。请帮我纠正我的功能。 这是我的功能:
def getTokenss(tweet):
poses = []
words = tweet.split()
for i in nltk.pos_tag(words):
re.sub(r",", ":", j)
poses.append(i)
pos_pairs = map(list,zip(poses[:-1], poses[1:]))
return pos_pairs
这就是我得到的错误:
Traceback (most recent call last):
File "D:\posTag.py", line 112, in <module>
b =getTokenss(t)
File "D:\posTag.py", line 94, in getTokenss
j =re.sub(r",", ":", j)
File "c:\program files\python27\lib\re.py", line 151, in sub
return _compile(pattern, flags).sub(repl, string, count)
TypeError: expected string or buffer
答案 0 :(得分:1)
函数nltk.pos_tag
返回元组列表,其中每个元组由特定单词及其关联标记组成。这就是为什么你得到那个错误,因为re.sub
期望一个字符串作为它的第三个参数。
根据您的使用情况,您可能希望将nltk.pos_tag
的结果迭代为:
for (word, tag) in nltk.pos_tag(words):
#in case you want to merge the word and tag into a single string
item = '%s:%s' % (word, tag)
poses.append(item)
此外,语句pos_pairs = map(list,zip(poses[:-1], poses[1:]))
应该最有可能放在for
循环之外。
最后,如果你正在处理推文,我会推荐TweetTokenizer,它的表现要比split
方法好得多......
答案 1 :(得分:0)
您的代码中有一个j
变量调用re.sub(r",", ":", j)
,没有引用。