|
10鱼币
大家好,拜托大家帮我看看以下问题:(真心感谢,我有初步的代码)
我有一个名为【new 205
new 205.txt
(6.49 KB, 下载次数: 7)
】的文件。其中包含了多行数据。发现有些行中包含了【只打开的英文各类括号,但是没有对应的关闭的括号】,也就是说这些数据的“断句”有问题。
所以,我想让代码做如下处理:
1. 读取我语料中的每一行数据,然后识别语料中某一行数据中只包含打开的英文各类括号,但是没有括号关闭的一行数据。
2. 之后,从该行数据往后,查找到对应括号关闭的一行数据,该行数据或许在括号打开数据后的,第一行或许在后面的多个行中。
3. 找到后,将后面的这几行数据,往前拼接成一行数据。拼接时将原本的,后面的数据的换行符,替换为一个空格符,进而往前拼接。
注意:在英文括号中请你忽略单括号[]的处理,不要对其做处理。英文各类括号可能是嵌套的,因此你找完第一个后,开始找第二个,第二个后第三个,以此类推。
例如,
源文件中的4行:
AA << BB CC .
FF DD >> SS .
RR << TT YY >> UU << II OO PP .
KK LL >> II .
处理完后应该是:
AA << BB CC . FF DD >> SS .
RR << TT YY >> UU << II OO PP . KK LL >> II .
我用chatgpt得到如下名为【333
333.txt
(2.26 KB, 下载次数: 2)
】的代码,这个代码能处理上述问题,但是会生成重复数据。您可以跑这个代码看看,我跑完的结果是【括号处理后的-new 205文件
括号处理后的-new 205.txt
(12.31 KB, 下载次数: 1)
】,重复数据在生成的第二行。它把全部数据的处理结果都包含在了第二行,然后再开始第三行的处理。就这样时不时做一次“大总结”。我也找不到原因了,希望您练个手帮我搞一下,把这个问题解决,我搞了一天实在不行了,真心感谢。
本帖最后由 qq1151985918 于 2024-7-29 19:37 编辑
- import re
- def run(txt, symbols):
- with open(txt, 'r', encoding='utf-8') as f:
- data = f.readlines()
- data = '\n'.join([l.strip() for l in data])
- for symbol in symbols:
- if symbol == ['(',')']:
- pattern = r'\((.*?)\)'
- else:
- pattern = symbol[0] + '(.*?)' + symbol[-1]
-
- res = re.findall(pattern, data, re.DOTALL)
- res = [i for i in res if i.strip()]
- res_change = [i.replace('\n',' ') for i in res]
- for r, rc in zip(res, res_change):
- if r.strip() != '.':
- data = data.replace(r, rc)
- with open(txt[:-4]+'_DAT.txt', 'w', encoding='utf-8') as g:
- g.write(data)
- print('OK')
-
- if __name__ == '__main__':
- run('new 205.txt',[['<<','>>'], ['{','}'], ['<','>'], ['(',')']])
复制代码
|
|