提取文本的一部分并将其格式化为Python?

时间:2019-11-22 15:12:27

标签: python-3.x text text-mining

我想从较大的文本中提取信息(文本)的某些特定部分,然后根据需要的格式将其导出。下面是一个示例

#Input
text={ Line 1: sergefdsgwerh Date is 10,29,2017
       Line 2aergsdfgsdfgasfdhgfasd
       Line 3: company Microsoft}

# Output
exported_text={ D 10 29 2017 C Microsoft}

x = []
with open("myfile.txt") as file:
    for l in file:
        x.append(l.strip())

X=[gives my lines as list item]




1 个答案:

答案 0 :(得分:0)

我会考虑三种不同的方式来实现您要执行的操作,具体取决于您的输入内容以及是否要在多段文本上进行输入。

对于以下示例,假设您的输入是这样的:

text = "Line 1: sergefdsgwerh Date is 10,29,2017\nLine 2aergsdfgsdfgasfdhgfasd\nLine 3: company Microsoft"

首先,如果您只有一段文字,或者您输入的内容始终采用完全相同的格式,则可以使用以下基本字符串操作轻松检索需要的信息部分Python。

要编写一个有效的示例,您可以使用以下方法获得所需的内容:

date = text.replace("\n", " ").split(" ")[5].replace(",", " ")
company = text.replace("\n", " ").split(" ")[-1]
output_text = "D "+date+" C "+company

print(output_text)

# > D 10 29 2017 C Microsoft

请注意,我们在这里使用了许多函数(有很多资源只是为了更好地了解这些函数,如果您不熟悉这些字符串操作,我建议您研究一下它们):

  • text.replace("\n", " ")在整个字符串中用空格:"\n"替换跳过行字符串:" "字符串
  • text.split(" ")将字符串拆分为一个列表,每当遇到空格" "时都会进行拆分
  • 等...

第二,如果您输入的格式在每次输入之间仅相差很小(例如,公司名称始终写在“公司”一词之后),可能的事情是使用regex库。如果要隔离公司名称,请使用以下实例。有多种方法可以使用regex在这里做您想做的事情,所以我将不做进一步的详细介绍:

company = re.search(r'company (\S+)', text)

print(company.group(1))

# > Microsoft

最后,如果您的输入不断变化,如果您是Python的新手,那么您想要做的事情要复杂得多,并且很难解释。但是,值得注意的是,仍然可以使用命名实体识别来实现,例如,可以使用SpaCy(here)库来实现。

也就是说,鉴于您输入的内容看起来像,使用此类库中的标准模型不会有多大帮助(因为它们是在有意义的文本的实际实例上进行训练的),因此您需要进行训练适合您特定用途的模型...