Как извлечь данные из набора данных с помощью регулярных выражений в Python?

1

У меня есть набор данных, и я хотел бы извлечь из этого набора данных удобную функцию.

در
همین
حال
،
<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_coreftype="atr" включает coref_coreftype="atr". Для списка find_ident я хочу сохранить данные coref_coreftype="ident" Таким образом, у нас на последнем тесте coref в этом наборе данных есть еще один тег coref, у которого есть coref_coref_class="empty". Я не хочу хранить эти данные с тегом coref_coref_class="empty". Теперь в regex я упомянул, что он должен включать только те, что coref_coref_class="set_.*?" не coref_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)
  • 0
    То, что у вас есть, выглядит как XML, так что использование ElementTree может работать.
  • 0
    @Lomtrur, это не файл XML. это было основано на MMAX2, и я преобразовываю это, используя соль. теперь мой файл имеет такую структуру. что не так с регулярным выражением? почему он включает в себя coref_coref_class = "пустой"
Показать ещё 9 комментариев
Теги:

1 ответ

0
Лучший ответ

Я уменьшил ваш файл набора данных до:

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 ']
  • 0
    Я попробовал ваш набор данных, и он работает, но снова, когда я попытался с моим набором данных, он дает тот же результат, что и предыдущий результат. Я не знаю почему
  • 0
    Когда вы сказали свой набор данных, это более длинный файл или такой же в вопросе? Может быть, проблема с вложенными тегами?
Показать ещё 6 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню