如何使用Tika将PDF文件拆分成段落

3
我有一个PDF文档,正在使用Tika-Python解析。我希望将文档分成段落。
我的想法是使用isspace()函数将文档分成段落,并创建段落列表。
我还尝试使用\n\n进行拆分,但无效。
以下是我的当前代码:
file_data = (parser.from_file('/Users/graziellademartino/Desktop/UNIBA/Research Project/UK cases/file1.pdf'))
file_data_content = file_data['content']

paragraph = ''
for line in file_data_content:
    if line.isspace():  
        if paragraph:
            yield paragraph
            paragraph = ''
        else:
            continue
    else:
        paragraph += ' ' + line.strip()
yield paragraph

在通过tikka从文件中提取的文本中,是否有明显的模式来宣布段落分割的位置?也许是换行符(或者可能是一对换行符?)如果您的tikka后文本提取包含这些文本线索,您可以通过“split”类型的命令利用它们。 - Thomas Kimber
@Thomas Kimber我也尝试使用空行标记器,但段落混乱了。file_data = (parser.from_file(file)) file_data_content = file_data['content'] file_paragraphs = blankline_tokenize(file_data_content) - Graziella De Martino
相关问题可能是重复的:将文档拆分为段落; 使用Python正确解析PDF段落 - Georgy
2个回答

1

我无法确定file_data_content现在的样子,因为我不知道您使用什么来处理PDF数据以及它返回什么。但是,如果它返回一个基本的字符串,例如Line1\nLine2\netc.,那么下面的内容应该可以工作。当您说:

for line in file_data_content:

如果file_data_content是一个字符串,而你处理这个字符串时是逐个字符处理而不是逐行处理,那显然会有问题。因此,你需要将文本拆分为一系列行的列表,并处理该列表的每个元素:

def create_paragraphs(file_data_content):
    lines = file_data_content.splitlines(True)
    paragraph = []
    for line in lines:
        if line.isspace():
            if paragraph:
                yield ''.join(paragraph)
                paragraph = []
        else:
            paragraph.append(line)
    if paragraph:
        yield ''.join(paragraph)

text="""Line1
Line2

Line3
Line4


Line5"""

print(list(create_paragraphs(text)))

输出:

['Line1\nLine2\n', 'Line3\nLine4\n', 'Line5']

非常感谢,这真的很有帮助。还有@Gregory,感谢您链接以下案例https://stackoverflow.com/questions/55499989/correctly-parse-pdf-paragraphs-with-python。 - Graziella De Martino

0
paragraphs = file_data_content.split('.\n\n')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接