我编写了一个使用nltk标记生成器预处理.txt文件的函数。基本上,该函数采用.txt文件,修改它以使每个句子出现在单独的行上,并覆盖旧文件上的修改文件。
我想修改函数(或者可能创建另一个函数)以在标点符号之前插入空格,有时在标点符号之后插入空格,如括号中的情况。换句话说,抛开功能已经做的事情,我也希望它改变“我想写好,干净的句子。”进入“我想写好,干净的句子。”
我是初学者,我怀疑我可能只是错过了一些非常简单的东西。非常感谢一点帮助。
我现有的代码如下:
import nltk.data
def readtowrite(filename):
sent_detector = nltk.data.load('tokenizers/punkt/english.pickle')
with open(filename, 'r+') as f:
fout = str(f.read())
stuff = str('\n'.join(sent_detector.tokenize(fout.strip())))
f.seek(0)
f.write(stuff)
答案 0 :(得分:0)
这是我想出的答案。基本上,我创建了一个单独的函数来在句子中标点之前和之后插入空格。然后我在readtowrite函数中调用了该函数。
以下代码:
import string
import nltk.data
def strip_punct(sentence):
wordlist = []
for word in sentence:
for char in word:
cleanword = ""
if char in string.punctuation:
char = " " + char + " "
cleanword += char
wordlist.append(cleanword)
return ''.join(wordlist)
def readtowrite(filename):
sent_detector = nltk.data.load('tokenizers/punkt/english.pickle')
with open(filename, 'r+') as f:
fout = str(f.read())
stuff = str('\n'.join(sent_detector.tokenize(fout.strip())))
morestuff = str(strip_punct(stuff))
f.seek(0)
f.write(morestuff)
答案 1 :(得分:0)
我认为加载nltk.data.load('tokenizers/punkt/english.pickle')
相当于在NLTK中调用sent_tokenize()
和word_tokenize
函数。
也许这个脚本会更有帮助:
def readtowrite(infile, outfile):
with open(outfile, 'w') as fout:
with open(filename, 'r') as fin:
output = "\n".join([" ".join(word_tokenize(i)) for i in sent_tokenize(str(f.read()))])
fout.write(output)