Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从语料库中删除标点符号时出错_Python_String_Nltk - Fatal编程技术网

Python 从语料库中删除标点符号时出错

Python 从语料库中删除标点符号时出错,python,string,nltk,Python,String,Nltk,提前感谢您的帮助。我正在尝试编写一个脚本,它将查看一个语料库,找到所有的三角图,并将它们连同它们的相对频率一起打印到一个csv文件中。我已经走了相当远,但一直遇到一个问题。它认为连接词是两个单词,因为撇号,所以它将“不”拆分为“不”,这会弄乱三叉图的计数。我试图通过删除原始变量中的所有标点符号来解决这个问题,我相信这只是一个长字符串,包含了我语料库中的所有文本,行为: raw = raw.translate(None, string.punctuation) 但这给了我一个错误:Nam

提前感谢您的帮助。我正在尝试编写一个脚本,它将查看一个语料库,找到所有的三角图,并将它们连同它们的相对频率一起打印到一个csv文件中。我已经走了相当远,但一直遇到一个问题。它认为连接词是两个单词,因为撇号,所以它将“不”拆分为“不”,这会弄乱三叉图的计数。我试图通过删除原始变量中的所有标点符号来解决这个问题,我相信这只是一个长字符串,包含了我语料库中的所有文本,行为:

    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|')+')