1 Вопрос: Как сопоставить именованные объекты на основе каждого предложения, а не через файл

вопрос создан в Wed, Apr 10, 2019 12:00 AM

У меня есть текстовый файл, и я реализую NER Polyglot, чтобы извлечь объекты из этого текстового файла. Затем я должен сегментировать каждое предложение и сопоставлять извлеченные сущности в каждом предложении. При совпадении это должно дать мне вывод.

from polyglot.text import Text
file = open('input_raw.txt', 'r')
input_file = file.read()
file = Text(input_file, hint_language_code='fa')

def return_match(entities_list, sentence):       ## Check if Chunks
    for term in entities_list:                  ## are in any of the entities
        ## Check each list in each Chunk object 
        ## and see if there's any matches.
        for entity in sentence.entities:
            if entity == term:
                return entity
    return None

def return_list_of_entities(file):
    list_entity = []
    for sentence in file.sentences:
        for entity in sentence.entities:
            list_entity.append(entity)
    return list_entity

list_entity = return_list_of_entities(file)
#sentence_number = 4 # Which sentence to check
for sentence in range(len(file.sentences)):
    sentencess = file.sentences[sentence]


match = return_match(list_entity, sentencess)

if match is not None:
    print("Entity Term " + str(match) +  
          " is in the sentence. '" + str(sentencess)+ "'")
else:
    print("Sentence '" + str(sentencess) + 
          "' doesn't contain any of the terms" + str(list_entity))


input_file:

Bill Gates is the founder of Microsoft.
Trump is the president of the USA.
Bill Gates was a student in Harvard.

Когда мы реализуем NER, сущности выглядят так:

list_etity:

Bill Gates, Microsoft, Trump, USA, Bill Gate, Harvard

Когда мы сопоставляем сущности с первым предложением, это дает:

Токовый выход:

(Bill Gates, Bill Gates, Microsoft)

Ожидаемый результат:

(Bill Gates, Microsoft) # this is from the first sentence and should contine
(Trump, USA) 
(Bill Gates, Harvard)
    
1
1 ответ                              1                         
from polyglot.text import Text
import json
file = open('input_raw.txt', 'r')
input_file = file.read()
file = Text(input_file, hint_language_code='fa')

result = set()
entities_with_tag = []
def return_match(entities_list, sentence):  # Check if Chunks
    for i in range(len(sentence.entities)):
        for j in range(len(entities_list)):
            if entities_list[j] == sentence.entities[i]:
                # result.append(sentence.entities[i])
                result.add(str(sentence.entities[i]))
                entities_with_tag.append(sentence.entities[i])

def return_list_of_entities(file):
    list_entity = []
    for sentence in file.sentences:
        for entity in sentence.entities:
            list_entity.append(entity)
    return list_entity

list_entity = return_list_of_entities(file)

def return_sentence_number():
    for i in range(len(file.sentences)):
        sentence_no = file.sentences[i]
        return sentence_no

sent_no = return_sentence_number()
return_match(list_entity, sent_no)
print("Entity Term " + str(result) + " is in the sentence. '" + str(sent_no) + "'")
    
0
2019-04-11 08: 29: 40Z
источник размещен Вот