【问题标题】:Split Documents into Paragraphs将文档拆分为段落
【发布时间】:2017-01-28 19:03:28
【问题描述】:

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

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

有这方面的训练数据吗?我应该尝试一些可能有效的复杂正则表达式吗?

【问题讨论】:

    标签: python regex machine-learning apache-tika


    【解决方案1】:

    我将尝试提供一种更简单的方法来解决您的问题:您需要做的是检查双精度 \nl,然后如果您找到双精度 \nl,则考虑到这一点对数据进行排序,如果您没有找到double \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并根据需要替换它们以区分新行或新段落。(如果文件大小为太大,否则可能会出现内存问题或代码变慢)

    【讨论】:

    • 感谢您的回复。首先,你是对的,应该是\n。其次,全文中存在\n\n并不一定表示段落中存在\n。由于其他原因,该文档可能包含\n\n。
    • @Gino 好吧,格式应该是统一的,但如果你写的是这种情况,那么上帝会帮助你,因为这样就没有办法(除非有其他东西可以识别新的段落)区分哪个地方有多少行。你能发布一个样本吗?我会试着看看有什么我能做的。
    【解决方案2】:

    你说

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

    所以我会预处理所有文件以使用段落之间的双换行符进行检测。带有双 \n 的文件需要去除所有单换行符,并将所有双换行符减少为单行。

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

    【讨论】:

    • 哦,你的意思就是我前一天写的? :D
    • @iamnotgoogle - 现在我再次阅读了你的答案,是的,我明白你所说的。尽管我并没有立即清楚,因为您正在谈论对数据进行排序。另外,由于 Gino 说“由于其他原因,该文档可能包含 \n\n”,我认为必须采用更好的检测方法。
    • 谢谢。我想检测它的正确方法是简单地计算文档中\n\n 的数量。
    【解决方案3】:
    from nltk import tokenize
    tk=tokenize
    a='para here'
    tk.sent_tokenize(a)
    #output =list of sentences
    
    #thats all u need
    

    【讨论】:

    • 虽然此代码可能会回答问题,但提供有关它如何和/或为什么解决问题的额外上下文将提高​​答案的长期价值
    猜你喜欢
    • 1970-01-01
    • 2013-08-13
    • 1970-01-01
    • 1970-01-01
    • 2013-05-21
    • 2020-09-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多