Python 从语料库中删除标点符号时出错
提前感谢您的帮助。我正在尝试编写一个脚本,它将查看一个语料库,找到所有的三角图,并将它们连同它们的相对频率一起打印到一个csv文件中。我已经走了相当远,但一直遇到一个问题。它认为连接词是两个单词,因为撇号,所以它将“不”拆分为“不”,这会弄乱三叉图的计数。我试图通过删除原始变量中的所有标点符号来解决这个问题,我相信这只是一个长字符串,包含了我语料库中的所有文本,行为:Python 从语料库中删除标点符号时出错,python,string,nltk,Python,String,Nltk,提前感谢您的帮助。我正在尝试编写一个脚本,它将查看一个语料库,找到所有的三角图,并将它们连同它们的相对频率一起打印到一个csv文件中。我已经走了相当远,但一直遇到一个问题。它认为连接词是两个单词,因为撇号,所以它将“不”拆分为“不”,这会弄乱三叉图的计数。我试图通过删除原始变量中的所有标点符号来解决这个问题,我相信这只是一个长字符串,包含了我语料库中的所有文本,行为: raw = raw.translate(None, string.punctuation) 但这给了我一个错误:Nam
raw = raw.translate(None, string.punctuation)
但这给了我一个错误:NameError:name'string'没有定义
但我不认为像这样使用字符串时必须定义它?这是否意味着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."
但我不认为像这样使用字符串时必须定义它
与Python中的所有其他模块一样,在使用之前需要导入
这是否意味着raw不是字符串
不要将字符串模块与字符串类型混淆。对raw可能是string类型
如何解决这个问题
在文件开头添加导入字符串。如果要在单词中保留撇号,请选择另一个选项 你不必把撇号分开。只需尝试在标记器上更改正则表达式以包含撇号:
tokenizer = RegexpTokenizer(r'\w+')
尝试:
或者也可以在此处查看此响应,它可能会更好:
你导入字符串了吗?哦!!非常感谢。这样做了,但现在我得到了以下错误:TypeError:translate只接受一个参数2,因为您需要使用接受2个参数的string.translate模块函数或接受1个参数的string的translate方法。简单地说,删除None。这样做了吗?现在它说:TypeError:字符映射必须返回integer、None或unicode。还有一个问题,您知道如何编写一个只通过空格标记的正则表达式吗?我想不出来你是说你想让正则表达式匹配任何东西直到它碰到空格?在这种情况下,您可以使用match,直到用^表示的表达式为止。此表达式应适用于^\S*
tokenizer = RegexpTokenizer(r'(\w|')+')