用Python创建一个表,其中每个句子来自一个段落,每一个句子都在一行上

2024-10-01 09:27:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个摘要,我用Python把它分成了几个句子。我想写两张桌子。一个包含以下列的文件:abstract id(这是我从文档中提取的文件号)、sentence id(自动生成)以及该摘要的每一个句子。 我想要一张这样的桌子

abstractID  SentenceID   Sentence

a9001755    0000001      Myxococcus xanthus development is regulated by(1st sentence)

a9001755    0000002      The C signal appears to be the polypeptide product (2nd sentence)

另一个表NSFClasses,具有{}和{}。 如何将句子(每一个句子都写在一行上)到表中并分配sentenceId如上所示?在

这是我的代码:

^{pr2}$

Tags: 文件文档abstractidissentence句子development
1条回答
网友
1楼 · 发布于 2024-10-01 09:27:41

正如其他人所指出的,遵循你的代码是非常困难的。我认为这段代码将根据您的预期输出和我们可以看到的内容来实现您想要的功能。不过,我可能离得很远,因为我们看不到你正在处理的文件。你的代码中有一部分我看不到足够的内容来重构,但是我觉得很明显是错的。它标在下面。在

import glob

for filename in glob.glob('awardsFile/awd_1990_00/*.txt'):
    fh = open(filename, 'r')
    abstract = fh.read().split(':')[-1]
    fh.seek(0)  # reset file pointer
    # See comments below
    for line in fh:
        if line.find('File') != -1:
            absID = line[14:]
            print absID
        if line.find('NSF Org') != -1:
            print line[14:].split()
    # End see comments
    fh.close()
    concat_abstract = ''.join(abstract.replace('\n', '').split())
    for s_id, sentence in enumerate(concat_abstract.split('.')):
        # Adjust numeric width arguments to prettify table
        print absID.ljust(15),
        print '{:06d}'.format(s_id).ljust(15),
        print sentence

在标记的部分中,您将搜索文件中字符串“File”和“NSF Org”的最后一次出现(不管您是否有意,因为只要变量出现,循环就会一直覆盖它们),然后对该行前面的第15个字符执行操作。如果没有看到文件,就不可能说怎么做,但我可以告诉你有更好的方法。它可能涉及到将整个文件作为一个字符串(或者至少是它的第一部分,如果这是在其头中的话)而不是循环搜索整个文件。在

另外,请注意我是如何压缩代码的。你在变量中存储了很多你根本不用的东西,并收集了很多分散状态的垃圾。为了理解N行的作用,我必须继续向前看N+5行,然后回顾N-34到N-17行来检查变量。这会在一定距离内产生大量的动作,出于所列举的原因,最好避免这些动作。在较小的版本中,您可以看到我是如何在字符串文本中替换它们只使用一次的地方,并立即调用print语句,而不是将结果存储到以后。结果通常更简洁易懂。在

相关问题 更多 >