我有大量的PDF文档库存。我使用Apache Tika将它们转换为文本,现在我想将它们分成段落。我不能使用正则表达式,因为文本转换使段落之间的区别变得不可能:某些文档在段落之间具有\n
的标准方式,但有些文档在同一段落中的行之间有\n
个然后在段落之间加倍\n
(使用Tika转换为HTML而不是文本无效)。
Python的NLTK书有splitting sentences using machine learning的方式,所以我想尝试用段落做类似的东西,但是我找不到训练数据。
是否有训练数据?我应该尝试一些可能有用的复杂正则表达式吗?
答案 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