Проблема, с которой я столкнулся, заключается в том, что некоторые слова не влияют на коэффициент сходства при добавлении, то есть они добавляются к текущему предложению, хотя на самом деле могут принадлежать следующему. В одном случае это даже произошло с таким словом, как «Следующий», которое, как я ожидал, будет весьма существенным.
Кроме того, длина предложения, похоже, влияет на это: по мере того, как предложение увеличивается, эффект от добавления отдельных слов уменьшается, что затрудняет принятие решения о том, к какому месту они принадлежат. Я также попробовал проверить эти слова в следующем предложении, но это усложняет ситуацию:
- Слово может существовать в обоих предложениях, что приводит к совпадению символов. это ложно увеличивает соотношение.
- Частичное совпадение символов слова в следующем предложении может создать впечатление, что слово принадлежит этому месту, хотя на самом деле это не так.
Предложения, которые я реконструирую, были предварительно обработаны с помощью nltk > send_tokenize, поэтому они могут отличаться от извлеченных слов (которые извлекаются из необработанного необработанного документа). fuzz.ratio учитывает эти различия, обрабатывая незначительные неточности в пунктуации и пробелах.
Минимальный пример, где я пытаюсь построить предложение из подмножества извлеченные слова:
Код: Выделить всё
from thefuzz import fuzz
# List of words extracted from a PDF (subset example)
all_pages_words = [
{"word": "Following"}, {"word": "the"}, {"word": "guidelines"},
{"word": "for"}, {"word": "submission"}, {"word": "are"}, {"word": "critical"},
{"word": "to"}, {"word": "success"}
]
# Sentence to match against
sentence_token = "Following the guidelines for submission"
# Construct sentence and calculate similarity
constructed_sentence = ""
old_similarity_ratio = fuzz.ratio(sentence_token, constructed_sentence)
starting_index = 0
while starting_index < len(all_pages_words):
last_word_index_pre_concatenation = len(constructed_sentence)
constructed_sentence += " " + all_pages_words[starting_index]["word"]
new_similarity_ratio = fuzz.ratio(sentence_token, constructed_sentence)
# Problem: some words don't affect the similarity ratio, causing issues
if new_similarity_ratio < old_similarity_ratio:
# Roll back and stop
constructed_sentence = constructed_sentence[:last_word_index_pre_concatenation]
break
else:
old_similarity_ratio = new_similarity_ratio
starting_index += 1
print(f"Final constructed sentence: {constructed_sentence.strip()}")
Я пробовал проверяет, принадлежат ли эти слова следующему предложению, но это приводит к новым проблемам:
- Слово может существовать в обоих предложениях, что приводит к частичному совпадению символов и ложному увеличивая соотношение.
- По мере увеличения следующего предложения эффект буферизованного слова становится меньше, что затрудняет определение того, действительно ли оно принадлежит.
Вопрос
- Как Могу ли я создать более надежный метод для обработки этих слов, который не будет существенно влиять на коэффициент сходства при восстановлении предложений?
- Есть ли лучшие способы проверить, к какому месту принадлежат эти слова, не приписывая их ложно неправильное предложение?
Подробнее здесь: https://stackoverflow.com/questions/789 ... ilarity-ra