gpt4 book ai didi

python - 使用python从段落中提取文本

转载 作者:行者123 更新时间:2023-11-28 18:58:38 25 4
gpt4 key购买 nike

我正在做一个项目,我们想从一段文本中提取公司名称、城市、州和美元金额。通常,此信息位于段落的开头,我一直在使用正则表达式查找第一个美元符号(这将是我们提取的金额),并在每个逗号之间查找文本,因为我们知道哪个顺序文本进来了。例如:

company name, city, state, amount $123,456,653

我们遇到过这样的情况,其中可能有 Xnumer 家公司,后面是他们的城市和州,然后是美元金额。

Example: company name 1, city, state, company name 2, city, state, amount $123,456,653

可能会出现这样的情况,虽然给出了公司名称,但下一条信息可能不是城市,而是以 xxx 运营的公司名称。

Example: company name 1, company name 1 longer, city, state, amount $123,456,653

最后,我们已经看到一些案例,其中可能会声明有多少家公司获得了一笔金额,后跟所有公司名称。

示例(片段):25 家公司已获得以下全局重量级服务的固定价格契约(Contract),无限期交付/无限期数量,固定价格契约(Contract),估计值(value)为 284,932,621 美元:ABX 航空公司,俄亥俄州威尔明顿 (HTC71119DC002);俄亥俄州威尔明顿国际航空运输公司 (HTC71119DC003);阿拉斯加航空公司,西雅图,华盛顿 (HTC71119DC004); Allegiant Air LLC,拉斯维加斯,内华达州 (HTC71119DC005);美国航空公司,德克萨斯州沃思堡 (HTC71119DC006); Amerijet International Inc.,佛罗里达州劳德代尔堡 (HTC71119DC007); Atlas Air Inc., Purchase, New York (HTC71119DC008;) Delta Air Lines Inc., Atlanta, Georgia (HTC71119DC009);哥伦比亚特区华盛顿联邦 express 公司 (HTC71119DC010);xxxxxxxxxxxxxx

通常,段落看起来像这样(70-80% 的时间):

L-3 Chesapeake Sciences Corp., Millersville, Maryland, is being awarded a $43,094,331 fixed-price-incentive,xxxxxxxxxx

只是想知道是否有人对 python 库或提取特定文本的更好方法有一些建议。我想过实现某种类型的 API,它会获取提取的值(用逗号分隔后)并通过检查它是城市还是州来运行它,然后我们可能会知道数据在列表中的哪个位置是,接下来可能会发生什么(状态)。

这是我当前使用的正则表达式:r'([^$]*),.*?\$([0-9,]+)

最佳答案

您可能会设计一些表达式来捕捉段落中的那些上市公司,例如:

(?i)([a-z0-9\s.-]*),([^\r\n,]*),\s*(Ohio|Washington|Georgia|Nevada|Florida|Texas|New York|District of Columbia)\s+\(\s*([a-z0-9]{13};?)\s*\)

并根据需要添加或删除边界,其他边界也同样如此。

测试

import re

string = """
Twenty-five companies have been awarded a firm-fixed-price contract under the following Global Heavyweight Service, indefinite-delivery/indefinite-quantity, fixed-price contracts with an estimated value of $284,932,621: ABX Air Inc., Wilmington, Ohio (HTC71119DC002); Air Transport International Inc., Wilmington, Ohio (HTC71119DC003); Alaska Airlines Inc., Seattle, Washington (HTC71119DC004); Allegiant Air LLC, Las Vegas, Nevada (HTC71119DC005); American Airlines, Fort Worth, Texas (HTC71119DC006); Amerijet International Inc., Fort Lauderdale, Florida (HTC71119DC007); Atlas Air Inc., Purchase, New York (HTC71119DC008;) Delta Air Lines Inc., Atlanta, Georgia (HTC71119DC009); Federal Express Corp., Washington, District of Columbia (HTC71119DC010);

"""

expression = r'(?i)([a-z0-9\s.-]*),([^\r\n,]*),\s*(Ohio|Washington|Georgia|Nevada|Florida|Texas|New York|District of Columbia)\s+\(\s*([a-z0-9]{13};?)\s*\)'
matches = re.findall(expression, string)

print(matches)

输出

[(' ABX Air Inc.', ' Wilmington', 'Ohio', 'HTC71119DC002'), (' Air Transport International Inc.', ' Wilmington', 'Ohio', 'HTC71119DC003'), (' Alaska Airlines Inc.', ' Seattle', 'Washington', 'HTC71119DC004'), (' Allegiant Air LLC', ' Las Vegas', 'Nevada', 'HTC71119DC005'), (' American Airlines', ' Fort Worth', 'Texas', 'HTC71119DC006'), (' Amerijet International Inc.', ' Fort Lauderdale', 'Florida', 'HTC71119DC007'), (' Atlas Air Inc.', ' Purchase', 'New York', 'HTC71119DC008;'), (' Delta Air Lines Inc.', ' Atlanta', 'Georgia', 'HTC71119DC009'), (' Federal Express Corp.', ' Washington', 'District of Columbia', 'HTC71119DC010')]

If you wish to explore/simplify/modify the expression, it's been explained on the top right panel of regex101.com. If you'd like, you can also watch in this link, how it would match against some sample inputs.


关于python - 使用python从段落中提取文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55319641/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com