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

Extract some part of text and format it desirably in Python?

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

#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]




我会想到三种不同的方法来实现你想要做的事情,这取决于你的输入是什么样子的,以及你是否想对多段文本进行操作。

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

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", " ") 用 space:" " 替换跳行字符串:"\n" 整个字符串
  • text.split(" ") 将字符串拆分为一个列表,每次拆分在遇到 space:" " 时完成
  • 等...

其次,如果您的输入格式在每个输入之间仅略有不同(例如,公司名称始终写在 "company"), 一种可能的方法是使用 regex 库。如果你想隔离公司名称,这是一个例子。有很多方法可以在这里使用 regex 做你想做的事,所以我不会比这个更详细:

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

print(company.group(1))

# > Microsoft

最后,如果您的输入不断变化,如果您是 Python 的新手,您想做的事情会更复杂,也更难解释。然而,值得注意的是,它仍然可以使用命名实体识别来实现,例如,可以使用库 SpaCy (here).

就是说,考虑到您的输入看起来像什么,使用此类库中的标准模型对您帮助不大(因为它们是在有意义的文本的真实实例上训练的),并且您需要训练适合您特定用途的模型...