2017-09-06 45 views
0

我有一个相当简单的文档(用于任务的政府策略),其中包含标题,普通文本,然后是项目符号点(这是他们希望实施的策略)。仅使用R或Python从PDF中提取项目符号点

我可以从.pdf中读取和提取页面或标题,并将其转换为.txt,但我只想将文本(整段)保留在项目符号点内,这正是我所感兴趣的。估计有一些方法可以做到这一点,因为它们可能会被子弹点本身识别出来。

是否有足够简单的方法在R和/或Python中执行此操作?我不熟悉其他编程语言或解析方法。

编辑:只需很快地将基本文本转换为HTML(使用https://wordtohtml.net)在页面上,它似乎将项目符号点为<li>,我猜测会很容易解析。有没有简单的方法将整个262页的文档转换为HTML格式,并保存<li>格式,可能是R/python格式?或者你知道一种PDF方式 - 因为至少有一个步骤可以做到这一点 - 对于我的问题?

+0

你看过'pdftools'包吗?它有一个'pdf_text'函数,它至少应该能够读取原始文本。您必须查看输出结果是否可以删除标题和普通文本。取决于格式的一致性,正则表达式可能会帮助您。 – Mako212

+0

好主意。是的,我收到了原始文本。下面是一段摘录:\ n \ n•改变一个家庭的家庭,多少个家庭,dos \ nfuncionáriospúblicos和dos pensionistas; \ n “' '\ n'表示换行。假设它的写法完美,我想要的是在'•'和'; \ n'之间,因为导致项目符号点的句子以':\ n'结尾。 但创建数据框时,我每页有1行。之后,我需要将每个项目符号分组到自己的行中。 –

+1

听起来像你在正确的轨道上。如果你有其他的字符串在 – Mako212

回答

1

这里是我的一般方法:

阅读中的样本串

require(stringr) 

string <- "passarão a estar inscritas políticas públicas que permitam:\n • Inverter a tendência de perda de 
rendimento das famílias, dos trabalhadores, dos\n funcionários públicos e dos pensionistas;\n" 

斯普利特与子弹开始的字符串的\n

# match semi-colon or colon, then a backslash, then "n". I.E. split by ;\n or :\n 
stringList <- unlist(str_split(string, "([;:])\\\n")) 

返回位置:

matched <- grep("\\\u0095", stringList) 

子集以与子弹开始字符串:

stringList[matched] 

该溶液的薄弱部分目前是,它依赖于由前面被子弹“; \ n”或“:\ n”个。如果你只是通过“\ n”分割,你会失去子弹的第二部分,只要它继续到第二行。根据文档的格式,您可能需要更改正则表达式以确保正确地分割字符串

也可以按项目符号进行初始分割:stringList <- unlist(str_split(string, "\\u0095"))但您需要一个规则来定义子弹的位置结束和纯文本开始。

+0

中混合,你应该能够选择与正则表达式匹配的模式“•.....; \ n”。你的解决方案似乎虽然不完全工作。在我的例子中''匹配< - grep(“\\\ u0095”,stringList)'必须改为'matched < - grep(“\\•”,stringList)'才能得到想要的结果。你的'character(0)'的'stringList [matched]'返回了一个'​​integer(0)'的匹配项。 –

+0

得到它的全文工作。 262页显然有1071个要点!现在我只需要清理一下文本,删除文本中间的一些'\ n'和其他东西。 每行输出示例: '[1]“•Relançaro investimento naCiência,naInovação,naEducação,na形式和文化, –

+0

只是为了澄清:尽管在我的评论中,在'\ n'之后,在我的代码中只有一个空格(在粘贴到word并在'R'中混入'nchar()'后),实际上有8个空格。 –