用大写和小写分割多个连接的单词

时间:2016-04-13 05:59:15

标签: python regex python-2.7 pdf text-mining

我发现了一些与此主题相关的问题。但是,我还没有找到一个解决方案,该解决方案带来了一个关于如何使用正则表达式拆分连接单词(西班牙语)的特定想法,例如使用正则表达式。

我使用PyPDF2从几个pdf中提取文本。信息总是按照相同的顺序。

运行PyPDF2代码后,我得到这样的项目:

'MASCULINOFecha de NacimientoLugar de Nacimiento'
'CASADONivel Educativo'

在这两种情况下,项目都是来自pdf内容的关键词。我试图得到的输出应该是这样的(使用之前的例子):

'MASCULINO'
'Fecha de Nacimiento'
'Lugar de Nacimiento'
'CASADO'
'Nivel Educativo'

我尝试使用正则表达式模块来分割特定的模式。到目前为止,这是我的代码:

pdfFile = open('example.pdf', 'rb')
pdfReader = PyPDF2.PdfFileReader(pdfFile)
for page in range(0, pdfReader.getNumPages()):
    text = pdfReader.getPage(page).extractText()
    for line in text.split(':'):
        pattern = re.compile(r'([A-Z][a-z]+(?=\s[A-Z])(?:\s[A-Z][a-z]+)+)')
        result = re.findall(pattern, line)
        print result

它分裂了几个项目,但没有全部。

是否有更好的正则表达式模式来分割这些词?

任何解决问题的建议都是适用的。感谢

2 个答案:

答案 0 :(得分:1)

尝试使用$ bash sim2darray.sh The simulated 5x5 2D array: [[ 0 1 2 3 4 ] [ 5 6 7 8 9 ] [ 10 11 12 13 14 ] [ 15 16 17 18 19 ] [ 20 21 22 23 24 ]] 并替换为(?<=[A-Za-z])(?=[A-Z][a-z])或拆分。

这将检测大写或小写与大写或小写之间的\n。这似乎是逻辑分隔符。

<强>输入

zero-width

MASCULINO|Fecha de Nacimiento|Lugar de Nacimiento CASADO|Nivel Educativo 表示匹配的零宽度。

<强>输出

|

<强> Regex101 Demo

正如Wiktor在评论中提到的那样

  

您不能将re.split与匹配正则表达式的空字符串一起使用。如果需要拆分,请使用PyPi正则表达式模块。

     

re.sub中没有此类错误,它用作解决方法:使用re.sub将未使用的字符插入到字符串中,然后使用此字符重新插入re.split。只需选择一些肯定不在输入中的字符(通常是控制字符,或未使用的Unicode范围中的字符)。

在匹配的零宽度中替换MASCULINO Fecha de Nacimiento Lugar de Nacimiento CASADO Nivel Educativo 并在~上拆分将为您提供一系列结果。

Python代码:

~

<强> Ideone Demo

答案 1 :(得分:1)

\B(?=[A-Z][a-z])上拆分。它会找到大写字母后跟一个小写字母,后面跟一个字边界。

在测试用例中完成了222步 - see it here

此致