Проверять наличие двух элементов списка в dict на основе каждого предложения? - PullRequest
0 голосов
/ 12 марта 2019

У меня есть файл JSON ...

  "1": {"address": "1",
          "ctag": "Ne",
          "feats": "_",
          "head": "6",
          "lemma": "Ghani",
          "rel": "SBJ",
          "tag": "Ne",
          "word": "Ghani"},
    "2": {"address": "2",
          "ctag": "AJ",
          "feats": "_",
          "head": "1",
          "lemma": "born",
          "rel": "NPOSTMOD",
          "tag": "AJ",
          "word": "born"},
    "3": {"address": "3",
          "ctag": "P",
          "feats": "_",
          "head": "6",
          "lemma": "in",
          "rel": "ADV",
          "tag": "P",
          "word": "in"},
    "4": {"address": "4",
          "ctag": "N",
          "feats": "_",
          "head": "3",
          "lemma": "Kabul",
          "rel": "POSDEP",
          "tag": "N",
          "word": "Kabul"},
  "5": {"address": "5",
          "ctag": "PUNC",
          "feats": "_",
          "head": "6",
          "lemma": ".",
          "rel": "PUNC",
          "tag": "PUNC",
          "word": "."},

Я читаю файл JSON и сохраняю его в файле.

import json

# read file
with open('../data/data.txt', 'r') as JSON_file:
     obj = json.load(JSON_file)

d = dict(obj) # stored it in a dict

Из этого dict я извлек два списка, которыекаждый список содержит relation из текста и entities следующим образом:

 entities(d) = ['Ghani', 'Kabul', 'Afghanistan'....]
 relation(d) = ['president', 'capital', 'located'...]

Теперь я хочу проверить в каждом предложении dict d, существует ли какой-либо элемент entities(d) и relation(d), он должен быть сохранен в другом списке.Что я сделал?

to_match = set(relation(d) + entities(d))
entities_and_relation = [[j for j in to_match if j in i] 
                    for i in ''.join(d).split('.')[:-1]]
print(entities_and_relation)

Но это вернуло мне пустой список.Можете ли вы сказать мне, что здесь не так.

ВЫХОД должен выглядеть следующим образом: [Гани, президент, Афганистан] ...

1 Ответ

0 голосов
/ 13 марта 2019

Здесь я решил эту проблему, но я не знаю, как задать ей конкретный формат для каждой связанной сущности.

for i in d.values():
if i['word'].split('.')[-1] in to_match:
    print('{: ^10}'.format(i['word']))

Вывод:

 Ghani
 Kabul
 Born
 Kabul
 Captial
 Afghanistan

Мой ожидаемый вывод:

 (Ghani, born, Kabul), (Kabul, capital, Afghanistan) or ...
 Born_in(Ghani, Kabul), Capital_of(Kabul, Afghanistan)

Я не знаю, отобразить это или спроектировать так, чтобы получить ожидаемый результат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...