我有这个旧文档,我正在帮助清理并转换成数据集。这是一项以访谈的形式进行的研究,但不幸的是,实施这项研究的人员包括速写笔记,这些笔记与受访者的回答混合在一起。这个过程的第一步是我将这些笔记与回复分开。然后,我想创建一个.csv,其中包含一个包含响应的列和另一个包含备注的列。在Python中搜索文档并分离正则表达式
这里是什么在研究的数据目前看起来像(从我犯了一个小test.txt文件)的例子:
$ AKAR3NDA.S+ QRUSS/)+ A BLAJ3R
0
FIN ABIXU/BRIVNS+TELE
IB3G81S+R1.B+ QI KOPIRN /AKCENT CLN VERBS+TAM XX(010
什么我在与使用Python的re模块真正的麻烦挑出我正在搜索的任何正则表达式。现在我只通过查看是否可以打印单独的注释和响应来测试它,所以我会将.csv部分从我的代码中移出。这里是我的代码,我有:
1 import re
2
3 notation = r"(^\+ | \+$ | ^- | -$ | \+ BUT\b | - BUT\b | ^\$ | \$$ | ^\+\$ | \+\$$ | ^-\$ | -\$ | DRWG | QB\b | QT\b | QBF | QTF | QFR | ^= | =$ | Q a Q | QP\b | QM/Y | QF/Y | ^\* | \*$ | QU\b | Q-U | QUU | QR\b | QRR | QH\b | QS\b | QW\b | Q-W | QAP | Q-AP | QN\b | QNN | QOF | QOOF | QK\b | Q-K | QLIT | QV\b | QEM | QVL | QDG | QAMER | QHUM | QELSW | QRTR | QSMT | QOTW | QNEX | QET\b | QPOL | QRUSS | QRUM | QHUNG | QGERM | QSYN | QGL\b | QGLY | QYID | QGLE | QENG | QI GL | QANG | QI\b | ^\) | \)$ | ^\)\+ | \)\+$ | ^\)- | \)-$ | ^\)= | \)=$ | EQ | \|\| | QCF | QZZ | QZT | \.\.\.{1} | QETC | QVB | QADJ | QINF | QNOUN | /[^/]+/ | \b/ | \bCM\b | \bCLN\b | \bSC\b | \bXX\b | QQ\b | ^0\b | ^O\b | QNT | Q-T | QLAT | QTA | QNP | QMEMX | \u2721 | QED\b | QEDS | \(/[0-9]* | \([0-9]* | \(\$[0-9]* | \(\(| QEDN | OVRPMP | MISPMP | MISTD)"
4
5 notesSeparate = []
6
7 with open("test.txt") as f:
8 data = f.readlines()
9
10 for line in data:
11 newRow = []
12 notes = str(re.findall(notation, line))
13 response = str(re.sub(notation, "", line))
14 newRow.append(response)
15 newRow.append(notes)
16 notesSeparate.append(newRow)
17
18 print notesSeparate
我也意识到,正则表达式是丑陋又长,但我不知道如何将其格式化,所以请任何指针上也欢迎。无论如何,当我运行该文件时得到的是以下输出。
[['$ AKAR3NDA.S+ QRUSS/)+ A BLAJ3R\n', '[]'], ['0\n', '[]'], ['FIN
ABIXU/BRIVNS+TELE\n', '[]'], ['IB3G81S+R1.B+KOPIRN /AKCENTVERBS+TAM
XX(010', "[' QI ', ' CLN ']"]]
我想越来越是:
[['AKAR3NDA.S+ A BLAJ3R\n', ('$', 'QRUSS/)+')], ['0\n', ('')], ['FIN
ABIXU/BRIVNS+TELE\n', ('')], ['IB3G81S+R1.B+KOPIRN /AKCENTVERBS+TAM',
(' QI ', ' CLN ', 'XX(010')]]
我知道这一切都是那么凌乱,但是这是一种点的 - 我试图把东西是超级凌乱,使它不那么如此。我无法告诉你我会多么感激某个方向。
感谢这么多 - 我想给一个尝试,看看能否改善我的代码。为了回答你关于大卫之星unicode的问题,我正在尝试清理的文档是OCRed(我确信一旦将此代码付诸实践,我将会介绍一组全新的挑战)。其中的一个角色可能会看起来像大卫之星,所以我把它包括在内是安全的。 我实际上不确定扩展/忽略空白是什么......你能解释一下还是指向我一个好的资源? – bkula
@bkula - 这是发生了什么。 'sub(notation,“,line)'不匹配任何东西,_newRow_附加_ [原始行] _。 're.findall(notation,line)'找不到任何东西,_newRow_附加_ [] _。基本的问题是,为了格式化正则表达式,没有任何东西是匹配的,因为你已经将_spaces_放在你想要匹配的东西的周围,但这些空格实际上并不在源中。当调用'sub()'或'findall()'或者在string_的开头添加内联修饰符'(?x)(?:)'时,尝试使用忽略空白标志。 –
sln
小费。你可能想要得到这个应用程序[RegexFormat](http://www.regexformat。让它为你格式化和压缩。 – sln