自动删除包含“ème”的数字和字母数字字词

时间:2016-09-14 11:25:26

标签: python-3.x sed

使用sed或我可以在txt文件目录上运行的其他程序,如何删除纯数字以及文件中的数字和字母组合,那些属于法国基数(例如2ème)。

例如,如果包含文本文件

12h03 11:00 27.8.16 23 3ème bonjour

然后我只想保留

3ème bonjour
保留

编辑 bonjour ,因为其中没有数字。保留3ème,因为它以ème(基数)结尾。其他令牌被删除,因为它们包含数字,但不是基数。

2 个答案:

答案 0 :(得分:0)

jwpfox:我之前从未使用过Python,但我愿意使用它。

与此同时,我写了一个丑陋的R脚本,似乎可以很好地完成我的目的。我会在这里分享。

# Sample text
text <- "Le 8 septembre à 11h30, Jean voyait les 2 filles pour la 3ème fois."

# Split up by space
splittext <- unlist(strsplit(text, 
                             split = " "))

# Retain words containing no numbers, or that contain 'ème' or punctuation.
selecttext <- splittext[!(grepl("\\d", splittext)) | 
                        grepl("ème", splittext) |
                        grepl("[[:punct:]]", splittext)]

# If a word contains both numbers and punctuation, retain only the punctuation
selecttext[grepl("\\d", selecttext) & grepl("[[:punct:]]", selecttext)] <- stringr::str_sub(selecttext[grepl("\\d", selecttext) & grepl("[[:punct:]]", selecttext)], start=-1, end =-1)

# Recombine
text2 <- paste(selecttext, collapse = " ")


> text2
[1] "Le septembre à , Jean voyait les filles pour la 3ème fois."

然后应该读取目录中的所有文件,通过上面的行运行它们,并覆盖源文件。

答案 1 :(得分:0)

由于您对Python的回答是开放的,因此这是Python3中的一个。

filepath变量中提供要处理的树的根目录的路径,这将遍历该目录下的树中的所有文件,并应用您提供的规则。

请注意,您似乎在R代码中应用的规则似乎与您在问题中列出的规则不同。

import os
import re

filepath = 'testfiles'
for(path, dirs, files) in os.walk(filepath):
    searchpattern = re.compile('[0-9]')
    for filename in files:
        curfilepath = os.path.join(path, filename)
        with open(curfilepath, mode='r', encoding='utf-8') as infile:
            cleanlines = []
            for line in infile:
                cleanline = ''
                words = line.split(' ')
                for word in words:
                    if 'ème' in word:
                        cleanline += word + ' '
                    if searchpattern.search(word) is None:
                        cleanline += word + ' '
                cleanline = cleanline.strip()
                if len(cleanline) > 0:
                    cleanlines.append(cleanline)

        with open(curfilepath, mode='w', encoding='utf-8') as outfile:
            for line in cleanlines:
                outfile.write(line + '\n')