python - 如何在 Python 中使用正则表达式从数据集中提取数据?
问题描述
我有一个数据集,我想从这个数据集中提取同位特征。
در
همین
حال
،
<coref coref_coref_class="set_0" coref_mentiontype="ne" markable_scheme="coref" coref_coreftype="ident">
نجیب
الله
خواجه
عمری
,
</coref>
<coref coref_coref_class="set_0" coref_mentiontype="np" markable_scheme="coref" coref_coreftype="atr">
سرپرست
وزارت
تحصیلات
عالی
افغانستان
</coref>
گفت
که
در
سه
ماه
گذشته
در
۳۳
ولایت
کشور
<coref coref_coreftype="ident" coref_coref_class="empty" coref_mentiontype="ne" markable_scheme="coref">
خدمات
ملکی
</coref>
از
حدود
۱۴۹
هزار
我想将数据集中的数据存储在两个列表中。在find_atr
列表中,我存储了 coref 标签包含的数据coref_coreftype="atr"
。对于find_ident
我想要存储数据的列表,coref_coreftype="ident"
因此我们在此数据集中的最后一个 coref 标记上有另一个 coref 标记,该标记具有coref_coref_class="empty"
. 我不想存储具有标签的数据coref_coref_class="empty"
。现在在我提到的正则表达式上,它应该只包括那些coref_coref_class="set_.*?"
notcoref_coref_class="empty"
但它仍然存储的数据coref_coref_class="empty"
,它应该只存储coref_coref_class="set_.*?"
.
如何避免:
i_ident = []
j_atr = []
find_ident = re.findall(r'<coref.*?coref_coref_class="set_.*?coref_mentiontype="ne".*?coref_coreftype="ident".*?>(.*?)</coref>', read_dataset, re.S)
ident_list = list(map(lambda x: x.replace('\n', ' '), find_ident))
for i in range(len(ident_list)):
i_ident.append(str(ident_list[i]))
find_atr = re.findall(r'<coref.*?coref_coreftype="atr".*?>(.*?)</coref>', read_dataset, re.S)
atr_list = list(map(lambda x: x.replace('\n', ' '), find_atr))
#print(coref_list)
for i in range(len(atr_list)):
j_atr.append(str(atr_list[i]))
print(i_ident)
print()
print(j_atr)
解决方案
我将您的数据集文件缩减为:
A
<coref coref_coref_class="set_0" coref_mentiontype="ne" markable_scheme="coref" coref_coreftype="ident">
B
</coref>
<coref coref_coref_class="set_0" coref_mentiontype="np" markable_scheme="coref" coref_coreftype="atr">
C
</coref>
D
<coref coref_coreftype="ident" coref_coref_class="empty" coref_mentiontype="ne" markable_scheme="coref">
E
</coref>
F
并尝试了这段代码,这与您提供的几乎相同:
import re
with open ("test_dataset.log", "r") as myfile:
read_dataset = myfile.read()
i_ident = []
j_atr = []
find_ident = re.findall(r'<coref.*?coref_coref_class="set_.*?coref_mentiontype="ne".*?coref_coreftype="ident".*?>(.*?)</coref>', read_dataset, re.S)
ident_list = list(map(lambda x: x.replace('\n', ' '), find_ident))
for i in range(len(ident_list)):
i_ident.append(str(ident_list[i]))
find_atr = re.findall(r'<coref.*?coref_coreftype="atr".*?>(.*?)</coref>', read_dataset, re.S)
atr_list = list(map(lambda x: x.replace('\n', ' '), find_atr))
#print(coref_list)
for i in range(len(atr_list)):
j_atr.append(str(atr_list[i]))
print(i_ident)
print()
print(j_atr)
并得到了这个输出,这对我来说似乎是正确的:
[' B ']
[' C ']
推荐阅读
- python - 在 Python 中读取用于决策树学习的 CSV 文本文件
- java - 在android 10及更高版本中仅接收一次位置信息时我必须前台服务吗?
- java - 我正在尝试重新创建我在 C++ 中创建的 Java 代码,但不断收到此错误:“未定义对 'Rooms::east' 的引用”
- python - Pandas read_sql_query 将 32 位数据转换为 64 位
- cloud - 什么是NetAPP?如何使用它 ?为什么我应该使用 NetAPP?
- install4j - 通过cli模式运行媒体文件时出现随机异常
- reactjs - 在 Gatsby/Contentful 中使用 Lodash get
- git - 如何获取 Azure Devops 中所有存储库的上周提交列表
- c# - 选择选项后返回 CLI 主菜单
- python - 从汤对象中选择 csv 文件 url