【问题标题】:Insert spaces next to punctuation when writing to .txt file写入 .txt 文件时在标点符号旁边插入空格
【发布时间】:2013-12-24 04:46:33
【问题描述】:

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

【问题讨论】:

    标签: string preprocessor nltk punctuation


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      我认为加载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)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-16
        • 2017-07-26
        • 1970-01-01
        • 1970-01-01
        • 2020-10-06
        相关资源
        最近更新 更多