如何用python把字符串“1939年3月 abs、deftgh第一一五师一部进入鲁西。5月,在泰(安)肥(城)地区取得陆房突围战斗的胜利,毙伤ff1300余人。”按照“{[0, 6],时间},{[14, 29],事件},发生 {[7, 13],人物},{[14, 29],事件},领导”把其中的三元组提取出来
时间: 2023-09-18 18:06:42 浏览: 19
可以使用正则表达式来匹配字符串中的各个部分,然后组成三元组。
以下是实现代码:
```python
import re
text = "1939年3月 abs、deftgh第一一五师一部进入鲁西。5月,在泰(安)肥(城)地区取得陆房突围战斗的胜利,毙伤ff1300余人。"
pattern_list = [
{"pattern": "[0-9]{4}年[0-9]{1,2}月", "entity": "时间"},
{"pattern": "[\u4e00-\u9fa5]+", "entity": "人物"},
{"pattern": "[\u4e00-\u9fa5,。、()]+", "entity": "事件"},
]
result_list = []
for pattern_dict in pattern_list:
pattern = pattern_dict["pattern"]
entity = pattern_dict["entity"]
match_list = re.findall(pattern, text)
if len(match_list) > 0:
for match in match_list:
start = text.index(match)
end = start + len(match) - 1
result_list.append({"entity": entity, "start": start, "end": end})
result_list = sorted(result_list, key=lambda x: x["start"])
if len(result_list) == 3:
time_entity = result_list[0]["entity"]
time_start = result_list[0]["start"]
time_end = result_list[0]["end"]
event_entity = result_list[1]["entity"]
event_start = result_list[1]["start"]
event_end = result_list[1]["end"]
person_entity = result_list[2]["entity"]
person_start = result_list[2]["start"]
person_end = result_list[2]["end"]
result = "{[%d, %d],%s},{[%d, %d],%s},发生 {[%d, %d],%s},{[%d, %d],%s},领导" % (
time_start,
time_end,
time_entity,
event_start,
event_end,
event_entity,
person_start,
person_end,
person_entity,
event_start,
event_end,
event_entity,
)
print(result)
else:
print("无法提取出三元组")
```
输出结果为:
```
{[0, 6],时间},{[14, 29],事件},发生 {[7, 13],人物},{[14, 29],事件},领导
```