Семантическое сходство предложений в тексте
Я использовал материал отсюда и предыдущую страницу форума, чтобы написать некоторый код для программы, которая автоматически вычислит семантическое сходство между последовательными предложениями по всему тексту. Вот;
Код для первой части - копия, вставленная из первой ссылки, затем у меня есть этот материал ниже, который я вставил после строки 245. Я удалил все лишнее после строки 245.
with open ("File_Name", "r") as sentence_file:
while x and y:
x = sentence_file.readline()
y = sentence_file.readline()
similarity(x, y, true)
#boolean set to false or true
x = y
y = sentence_file.readline()
Мой текстовый файл отформатирован так:
Красный алкогольный напиток. Свежий апельсиновый сок. Английский словарь. Желтые обои.
В конце я хочу отобразить все пары последовательных предложений со сходством рядом с ними, вот так;
["Red alcoholic drink.", "Fresh orange juice.", 0.611],
["Fresh orange juice.", "An English dictionary.", 0.0]
["An English dictionary.", "The Yellow Wallpaper.", 0.5]
if norm(vec_1) > 0 and if norm(vec_2) > 0:
return np.dot(vec_1, vec_2.T) / (np.linalg.norm(vec_1)* np.linalg.norm(vec_2))
elif norm(vec_1) < 0 and if norm(vec_2) < 0:
???Move On???
1 ответ
Это должно работать. Есть несколько вещей, чтобы отметить в комментариях. По сути, вы можете перебирать строки в файле и сохранять результаты по мере необходимости. Один из способов обрабатывать две строки за раз - это установить "бесконечный цикл" и проверить последнюю прочитанную строку, чтобы убедиться, что мы достигли конца (readline()
вернусь None
в конце файла).
# You'll probably need the file extention (.txt or whatever) in open as well
with open ("File_Name.txt", "r") as sentence_file:
# Initialize a list to hold the results
results = []
# Loop until we hit the end of the file
while True:
# Read two lines
x = sentence_file.readline()
y = sentence_file.readline()
# Check if we've reached the end of the file, if so, we're done
if not y:
# Break out of the infinite loop
break
else:
# The .rstrip('\n') removes the newline character from each line
x = x.rstrip('\n')
y = y.rstrip('\n')
try:
# Calculate your similarity value
similarity_value = similarity(x, y, True)
# Add the two lines and similarity value to the results list
results.append([x, y, similarity_value])
except:
print("Error when parsing lines:\n{}\n{}\n".format(x, y))
# Loop through the pairs in the results list and print them
for pair in results:
print(pair)
Изменить: Что касается вопросов, которые вы получаете от similarity()
Если вы хотите просто игнорировать пары линий, которые вызывают эти ошибки (без глубокого взгляда на источник, я действительно понятия не имею, что происходит), вы можете добавить try, catch
вокруг вызова similarity()
,