【发布时间】:2014-10-16 18:52:13
【问题描述】:
提前感谢您的帮助。我正在尝试编写一个脚本来查看语料库,找到所有三元组并将它们连同它们的相对频率一起打印到一个 csv 文件中。我已经走了很远,但一直遇到一个问题。由于撇号,它认为连词是两个词,因此它将doesn't 拆分为doesn t,这会弄乱三元组计数。我试图通过从原始变量中删除所有标点符号来解决这个问题,我相信这只是一个包含我的语料库中所有文本的长字符串:
raw = raw.translate(None, string.punctuation)
但这给了我一个错误,上面写着:NameError: name 'string' is not defined
但我不认为这样使用时必须定义字符串?这是否意味着 raw 不是字符串?如何解决这个问题?
#this imports the text files in the folder into corpus called speeches
corpus_root = '/Users/root'
speeches = PlaintextCorpusReader(corpus_root, '.*\.txt')
print "Finished importing corpus"
tokenizer = RegexpTokenizer(r'\w+')
raw = speeches.raw().lower()
raw = raw.translate(None, string.punctuation)
finalwords = raw.encode['ascii','xmlcharrefreplace']
tokens = tokenizer.tokenize(finalwords)
tgs = nltk.trigrams(tokens)
fdist = nltk.FreqDist(tgs)
minscore = 40
numwords = len(finalwords)
print "Words in corpus:"
print numwords
c = csv.writer(open("TPNngrams.csv", "wb"))
for k,v in fdist.items():
if v > minscore:
rf = Decimal(v)/Decimal(numwords)
firstword, secondword, thirdword = k
trigram = firstword + " " + secondword + " " + thirdword
results = trigram,v,rf
c.writerow(results)
print firstword, secondword, thirdword, v, rf
print "All done."
【问题讨论】:
-
你导入字符串了吗?
-
哎呀!!谢谢你。这样做了,但现在我收到以下错误:TypeError: translate() 只需要一个参数(给定 2 个)
-
因为你需要要么使用
string.translate模块函数接受2个参数,要么使用translate字符串方法接受一个。只需删除None。 -
做到了,现在它说:TypeError: character mapping must return integer, None or unicode