我是编程和正则表达式的新手,阅读了精通正则表达式,但我找不到如何摆脱制表符、换行符和奇怪的非单词或非数字字符(图标和奇怪的非我的 tsv 文件的文本列中的西方换行符(?)主要是)。它采用 utf-8 格式,采用瑞典语。
看起来像这样:
"from_user","month","full_text"
"bellaboo",4,"RT @BodilMalmsten: \"om man klarar av att föra ett bestick till munnen eller behöver hjälp på toaletten\"
Have a heart, borgarrådet
Have a hea,RT @BodilMalmsten: Borgarrådet om riktlinjerna \"om man klarar av att föra ett bestick till munnen eller behöver hjälp på toaletten\"
Hjälp
1 min dröm
2 allas önskningar
3 viljan att segra
H,RT @BodilMalmsten: Klarar du av att föra ett bestick till munnen eller behöver hjälp på toaletten?
http://t.co/fcvcf0U2dW"
任何人都可以帮助我,以便我继续进行我真正要对这个文件进行的文本分析吗?
请您参考如下方法:
由于您使用 python-3.x 标记了问题,因此这里是 Python 3.x 答案。
我认为您遇到的问题是 CSV 阅读器会对第三列中的所有换行符感到不安。该程序去除所有额外的换行符并规范化所有空白(单词由一个空格分隔)。
我正在使用带有注释的“详细”Python 模式,以明确它如何与列匹配。棘手的是第三个,它可以包含换行符。它只匹配任何内容,直到看到终止双引号。
我不确定您想如何清理字符串;我给出的模式只是替换了所有“控制字符”(ASCII 0x01 到 0x1f,包括 ASCII DEL 字符 0x7f) 带空格。然后空白规范化会清除任何额外的空格。
import re
import sys
_, infile, outfile = sys.argv
s_pat_row = r'''
"([^"]+)" # match column; this is group 1
\s*,\s* # match separating comma and any optional white space
(\S+) # match column; this is group 2
\s*,\s* # match separating comma and any optional white space
"((?:\\"|[^"])*)" # match string data that can include escaped quotes
'''
pat_row = re.compile(s_pat_row, re.MULTILINE|re.VERBOSE)
s_pat_clean = r'''[\x01-\x1f\x7f]'''
pat_clean = re.compile(s_pat_clean)
row_template = '"{}",{},"{}"\n'
with open(infile, "rt") as inf, open(outfile, "wt") as outf:
data = inf.read()
for m in re.finditer(pat_row, data):
row = m.groups()
cleaned = re.sub(pat_clean, ' ', row[2])
words = cleaned.split()
cleaned = ' '.join(words)
outrow = row_template.format(row[0], row[1], cleaned)
outf.write(outrow)
您可以编辑 s_pat_clean 中指定的模式来清理任何需要清理的字符。
要使用它,请将其保存在名为 cleaner.py 的文件中,并将您的输入放入名为 data.txt 的文件中,然后运行:
python3 cleaner.py data.txt cleaned.txt
结果保存在输出文件 cleaned.txt 中。
在您提供的示例上运行此命令的结果:
"from_user","month","full_text"
"bellaboo",4,"RT @BodilMalmsten: \"om man klarar av att föra ett bestick till munnen eller behöver hjälp på toaletten\"Have a heart, borgarrådet Have a hea,RT @BodilMalmsten: Borgarrådet om riktlinjerna \"om man klarar av att föra ett bestick till munnen eller behöver hjälp på toaletten\" Hjälp 1 min dröm 2 allas önskningar 3 viljan att segra H,RT @BodilMalmsten: Klarar du av att föra ett bestick till munnen eller behöver hjälp på toaletten? http://t.co/fcvcf0U2dW"
现在 CSV 阅读器在解析文件时应该没有问题。
编辑:使用正确的输入重新运行程序,并将输出示例替换为在正确的输入上运行的结果。当输入有重音符号时,它们会正确传递,如上所示。
