目标是从一篇招投标文章中识别出建筑面积的句子,甚至能估计这个,建筑面积的实际成本(目前不可能)。利用位置特征或者历史数据,提取最相似一个或者多个句子。
比如想从招投标文件中提取建筑面积字段。
建筑面积分词举例。
新建, 小, 区内, 篮球, 球场, 篮球场, 、, 羽毛, 球场, 羽毛球, 羽毛球场, 660, 平方, 平方米, ,, 硬化, 小区, 主干, 干线, 主干线, 3165, 平方, 平方米, ,, 透水, 砖, 铺筑, 人行, 行道, 人行道, 3165, 平方, 平方米, ,, 路缘石, 230, 米, ,, 修建, 垃圾, 垃圾站, 240, 平方, 平方米, ,, 建设, 小区, 安防, 设施, 等
陕西, 陕西省, 汉中, 汉中市, 2022, 年, 普通, 干线, 公路, 大中, 修及, 预防, 预防性, 养护, 工程, (, 第二, 二批, 第二批, ), 主要, 涉及, 6, 段, 累计, 全长, 74.252, 公里, 。, 按, 工程, 性质, 分为, 三类, 其中, 预防, 预防性, 补板, 工程, 涉及, 3, 段, ,, 分别, 为, G108, 线, K1614, +, 700, ~, K1631, +, 560, 、, K1631, +, 560, ~, K1646, +, 580, 、, K1612, +, 200, ~, K1614, +, 000, ,, 累计, 全长, 33.68, 公里, 大中, 大中修, 工程, 涉及, 2, 段, ,, 分别, 为, G108, 线, K1787, +, 800, ~, K1792, +, 720, 和, G316, 线, K2201, +, 200, ~, K2212, +, 300, ,, 累计, 全长, 16.02, 公里, 预防, 预防性, 精细, 细化, 精细化, 表处, 工程, 涉及, 1, 段, ,, 为, G210, 线, K1660, +, 040, ~, K1686, +, 850, ,, 全长, 26.352, 公里, 。,
新建, 游客, 服务, 中心, 服务中心, 198, 平方, 平方米, ,, 卫生, 卫生间, 2, 处, 36.8, 平方, 平方米, (, 单个, 18.4, 平方, 平方米, ), 道路, 、, 停车, 区, 5098.6, 平方, 平方米, ,, 其中, 房车, 位, 14, 个, ,, 普通, 停车, 车位, 停车位, 61, 个, 游客, 中心, 前, 平台, 201.88, 平方, 平方米, ,, 休闲, 广场, 1782.69, 平方, 平方米, ,, 儿童, 游乐, 游乐区, 717.21, 平方, 平方米, 帐篷, 宿营, 木, 平台, 894.88, 平方, 平方米, ,, (, 帐篷, 营位, 37, 个, ,, 营位, 5, 个, ), 栏杆, 475, 米, ,, 护坡, 425, 米, 绿化, 工程, 9483.21, 平方, 平方米, ,, 银杏, 14, 株, ,, 香樟, 107, 株, ,, 丹桂, 47, 株, ,, 玉兰, 广玉兰, 63, 株, ,, 红叶, 李, 71, 株, ,, 樱花, 69, 株, ,, 垂丝, 海棠, 24, 株, ,, 高杆, 石楠, 24, 株, ,, 红枫, 38, 株, 景观, 小品, 、, 雕塑, 6, 组, ,, 景观, 座椅, 24, 个, ,, 垃圾, 垃圾桶, 18, 个, 实施, 水电, 、, 导视, 标识, 及, 配套, 设施, 。
评估方法
import difflib
# def_in_df 数据框,ziduan 字符串,ziduandef 函数(输入字符串,输出字典,字典值为值非列表)),cutoff_def 数值)
def test(def_in_df,ziduan,ziduandef,cutoff_def):
len_num=len(def_in_df["content"])
num=0
num1=0
for i in range(len_num):
try:
test_value=ziduandef(def_in_df["content"][i])
if len(test_value)==0:
print("匹配不到")
print(i)
num+=1
elif difflib.get_close_matches(test_value[ziduan],[def_in_df[ziduan][i]],1, cutoff=cutoff_def)!=[def_in_df[ziduan][i]]:#cutoff=0.9说明高度匹配
print("匹配错误")
print(i)
num1+=1
except:
print("报错")
print(i)
rate="匹配不到占所有样本比率"+str(num/len_num)
rate1="匹配错误占所有样本比率"+str(num1/len_num)
return rate,rate1
方法1 基于文章中该句子的规则,用正则表达式的方法提取。
匹配不到占的所有样本比率0.08064516129032258’, ‘匹配错误占所有样本比率0.019794721407624633’
def buildingArea_def(string1):
Area_item_dict={}
if '规模' in string1:
if 'buildingArea' in Area_item_dict and Area_item_dict['buildingArea']:
pass
else:
try:
Area_item_dict['buildingArea'] = re.findall(r"规模:(.*?)等",string1)#string1.split('规模:')[1].replace(':', '').replace(':', '').replace(';', '').split("。\n")[0]
if len(Area_item_dict['buildingArea'])==0:
Area_item_dict['buildingArea'] = re.findall(r"规模:(.*?)。",string1)
if len(Area_item_dict['buildingArea'])==0:
# print("11")
Area_item_dict['buildingArea'] = re.findall(r"规模:(.*?)\n\xa0",string1)
Area_item_dict['buildingArea']=Area_item_dict['buildingArea'][0].replace(':', '').replace(':', '').replace(';', '').replace('#', '')
except IndexError as i:
pass
2 用句子相似度的深度学习模型,基于句子特征提取,类似人脸特征提取。如何在茫茫句海找到对应的句子?
3 用基于距离的方法,余弦相似度计算文本相似度。在全文找到和这类句子最相似一个或者多个的句子。
4 用基于词性标注。这段文字有大量的名词,量词,而其他句子没有。
法一 使用ERNIE-UIE 2.0
技术原理
ERNIE-UIE 2.0 技术方案是,将各种类型的信息抽取任务统一转化为自然语言的形式,并进行多任务联合训练,进而支持零样本信息抽取。模型的输入是待抽取文本(content)和自然语言描述的抽取目标(prompt),prompt 通常建议的结构为“A 的 B”或“B”的形式,如下例子:
content:出租方:小明 地址:筒子街12号 电话:12345678900 承租方:小红 地址:新华路8号 电话:18345678901
prompt:地址
result:筒子街12号,新华路8号
content:出租方:小明 地址:筒子街12号 电话:12345678900 承租方:小红 地址:新华路8号 电话:18345678901
prompt:小明的地址
result:筒子街12号\
GTP3的信息抽取
https://beta.openai.com/examples