объединить и добавить список в строку в Python с несколькими условиями - PullRequest
0 голосов
/ 05 мая 2018

Мне нужна помощь из моего дела

У меня есть 2 списка в Python, которые содержат слово и пометку:

[['The', 'DT'], ['Kawasaki', 'NNP'], ['Ki-100', 'NNP'], ['fighter', 'NN']...

и другой список, содержащий слово и тег NER:

[['Kawasaki', 'ORGANIZATION'], ['Imperial', 'ORGANIZATION'], ['Army Air Service', 'ORGANIZATION'], ['Japanese', 'GPE'] ...

Я хочу присоединиться к первому и второму списку, чтобы он выглядел следующим образом:

'Kawasaki NNP ORGANIZATION'

И все слова в первом списке должны иметь такой формат, и если для слова нет тега NER, он должен отображаться так:

'Kawasaki NNP'

и измените его в словарь следующим образом:

{'Kawasaki NNP ORGANIZATION',0}

Но когда я пытаюсь сделать это, есть слово, которое должно иметь NER-Tag, тег не отображается в списке.

Это код для первого списка:

import nltk
from nltk import word_tokenize

def taggering(text):
tagger = []
tag = nltk.pos_tag(nltk.word_tokenize(text))
for w in range(len(tag)):
    temp = list(tag[w])
    tagger.append(temp)
print(tagger)
return tagger

Это код для первого списка:

def NER_ring(text):
datasets = []

for sent in nltk.sent_tokenize(text):
    for chunk in nltk.ne_chunk(nltk.pos_tag(nltk.word_tokenize(sent))):
        if hasattr(chunk, 'label'):
            temp = [' '.join(c[0] for c in chunk), chunk.label()]
            datasets.append(temp)
print(datasets)
return datasets

Это строки, которые я пытаюсь сделать целевым текстом и словарем:

def builder(datasets,tagger):
ls = {}
new_build = []
temp=[]
for i in range(len(tagger)):
    words = str( tagger[i][0])
    tags = str(tagger[i][1])
    listed = [words,tags]
    temp.append(listed)
for w in range (len(temp)):
    for k in range (len(datasets)):
        if(temp[w][0]==datasets[k][0]):
            classtype = str(datasets[k][1])
        else:
            classtype = ""
        k++1
    word2 = temp[w][0]
    tag2 = temp[w][1]
    listed = str(word2+" "+tag2+" "+classtype)
    ls[listed]=0
    new_build.append(ls)
    w++1
return new_build

Мне нужен мудрый совет, чтобы закончить этот код, чтобы я мог использовать этот список для расчета ИК. Спасибо.

1 Ответ

0 голосов
/ 05 мая 2018

Вы можете использовать что-то вроде этого:

l1 = [['The', 'DT'], ['Kawasaki', 'NNP'], ['Ki-100', 'NNP'], ['fighter', 'NN']]
l2=[['Kawasaki', 'ORGANIZATION'], ['Imperial', 'ORGANIZATION'], ['Army Air Service', 'ORGANIZATION'], ['Japanese', 'GPE']]
d={}  # Output dict
for i in l1:
    for j in l2:
        if i[0] == j[0]:
           d['{} {} {}'.format(i[0], i[1], j[1])] = 0  # Desired number if match
           break
        d['{} {}'.format(i[0], i[1])] = 0  # Desired number if not match

d будет

{
 'Kawasaki NNP ORGANIZATION': 0,
 'Ki-100 NNP': 0, 'The DT': 0,
 'fighter NN': 0
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...