String 写入.txt文件时,在标点旁边插入空格

String 写入.txt文件时,在标点旁边插入空格,string,preprocessor,nltk,punctuation,String,Preprocessor,Nltk,Punctuation,我编写了一个函数,它使用nltk标记器预处理.txt文件。基本上,该函数接受一个.txt文件,对其进行修改,使每个句子出现在单独的一行上,并在旧文件上覆盖修改后的文件 我想修改这个函数,或者创建另一个函数,在标点符号之前插入空格,有时在标点符号之后插入空格,比如括号。换句话说,撇开函数已经完成的功能不谈,我也希望它能有所改变,我想写出好的、干净的句子。我想写出好的,干净的句子 我是一个初学者,我怀疑我可能只是错过了一些非常简单的东西。如果你能帮我一点忙,我将不胜感激 我现有的代码如下: impo

我编写了一个函数,它使用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)

这是我想出的答案。基本上,我创建了一个单独的函数,在句子中的标点符号前后插入空格。然后我在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)
我认为加载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)