将文档拆分为段落

时间:2017-01-28 19:03:29

标签: python regex machine-learning apache-tika

我有大量的PDF文档库存。我使用Apache Tika将它们转换为文本,现在我想将它们分成段落。我不能使用正则表达式,因为文本转换使段落之间的区别变得不可能:某些文档在段落之间具有\n的标准方式,但有些文档在同一段落中的行之间有\n个然后在段落之间加倍\n(使用Tika转换为HTML而不是文本无效)。

Python的NLTK书有splitting sentences using machine learning的方式,所以我想尝试用段落做类似的东西,但是我找不到训练数据。

是否有训练数据?我应该尝试一些可能有用的复杂正则表达式吗?

3 个答案:

答案 0 :(得分:1)

我将尝试提供一种更简单的方法来处理您的问题:您需要做的是检查双\nl然后如果您找到双\nl然后排序数据,考虑到,如果您找不到双\nl,只需根据单\nl对数据进行排序。

另一件事,我认为\nl不是一个特殊字符,因为我无法得到任何ASCII值,它可能是换行符,但是因为你要求\nl我给的是相应的示例(如果它确实是\n那么您只需要更改部分检查双\nl)。 检测文件中使用的新段落方式的粗略示例:

f=open('yourfile','r')
a=f.read()
f.close()
temp=0
for z in range(len(a)-4):
 if a[z:z+4]=='\nl\nl':
  temp=1
  break
#temp=1 if formatting is by double \nl otherwise 0

在此之后,您可以使用简单的字符串格式来检查单个\nl或双\nl,并根据您区分新行或新段落的需要替换它们。(请以块的形式阅读文件文件大小太大,否则可能会出现内存问题或代码速度变慢)

答案 1 :(得分:0)

你说

  

某些文档在段落之间有一个\ n的标准方式,但有些文档在同一段落中的行之间有一个\ n,然后在段落之间有一个双\ n \ n

所以我会使用段落之间的双换行来预处理要检测的所有文件。需要删除具有双\n的文件的所有单个换行符,并且所有双新行都缩减为单行。

然后,您可以将所有文件传递到下一个使用单个\n字符检测段落的阶段。

答案 2 :(得分:0)

from nltk import tokenize
tk=tokenize
a='para here'
tk.sent_tokenize(a)
#output =list of sentences

#thats all u need