Как получить линейный показатель сходства двух выровненных текстов со Spacy? - PullRequest
1 голос
/ 09 января 2020

У меня есть два выровненных документа на английском языке sh, каждый с одинаковым количеством строк (около 30 тыс.). Я хочу получить показатель сходства для каждой строки, то есть line_1 в text_a против line_1 в text_b , line_2 in text_a против line_2 in text_b и так далее. (Каждая строка может содержать более одного предложения) Я сделал это:

import spacy 
nlp = spacy.load('en_core_web_lg')

file_a = open('text-1.txt', 'r')
file_b = open ('text-2.txt', 'r')
a_doc = nlp(file_a)
b_doc = nlp(file_b)

for a,b in zip(a_doc, b_doc):    
    print("similarity:", a.similarity(b))   

Но я получаю следующую ошибку:

if len(text) > self.max_length:
TypeError: object of type '_io.TextIOWrapper' has no len()

Вы можете мне помочь? Это очень ценится

Ответы [ 2 ]

1 голос
/ 09 января 2020

nlp() ожидает строку, а не файловый объект. Я немного отредактировал твой код так:

import spacy
nlp = spacy.load('en_core_web_sm')

file_a = open('text-1.txt', 'r').read()
file_b = open ('text-2.txt', 'r').read()
a_doc = nlp(file_a)
b_doc = nlp(file_b)

for a,b in zip(a_doc, b_doc):
    print("similarity:", a.similarity(b))

и он работал нормально

0 голосов
/ 09 января 2020

nlp ожидает строку, а не объект-обработчик файла.

Попробуйте это

a_doc = nlp("".join(file_a.readlines()))
b_doc = nlp("".join(file_b.readlines()))
...