使用Python创建一个包含句子的句子的表格

时间:2014-03-30 10:42:54

标签: python oracle-sqldeveloper rows tabular

我有一个摘要,我用Python分成了句子。我想写2个表。其中包含以下列: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)

另一个NSFClassesabstractID的表格nsfOrg。 如何将句子(每一行)写入表并分配sentenceId如上所示?

这是我的代码:

import glob;
import re;
import json
org = "NSF Org";
fileNo = "File";
AbstractString = "Abstract";
abstractFlag = False;
abstractContent = []
path = 'awardsFile/awd_1990_00/*.txt';
files = glob.glob(path);
for name in files:
    fileA = open(name,'r');
    for line in fileA:
         if line.find(fileNo)!= -1:
             file = line[14:]
         if line.find(org) != -1:
             nsfOrg = line[14:].split()
    print file
    print nsfOrg
    fileA = open(name,'r')
    content = fileA.read().split(':')
    abstract = content[len(content)-1]
    abstract = abstract.replace('\n','')
    abstract = abstract.split();
    abstract = ' '.join(abstract)
    sentences = abstract.split('.')
    print sentences
    key = str(len(sentences))
    print "Sentences--- "

1 个答案:

答案 0 :(得分:0)

正如其他人所指出的那样,遵循你的代码是非常困难的。我认为这段代码会根据您的预期输出和我们可以看到的内容做您想做的事情。不过,我可能会离开,因为我们看不到您正在使用的文件。我特别感到困扰的是你的代码的一部分,我看不到足以重构,但感觉显然是错误的。它标在下面。

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语句而不是存储结果以供日后使用。结果通常更简洁,易于理解。