У меня есть список сообщений, и мне нужно через каждое сообщение, для каждого сообщения, которое мне нужно найти, если слово в этом сообщении соответствует слову из моего набора данных или начинается с слова из моего набора данных, я не могу найти быстрый способ сделать это правильно, используя Ahocorasic Что) < /p>
Также может быть несколько совпадений с одним словом (например, если в сообщении есть «12345», а набор данных ["123", "1234"] может совпадать, и лучшее совпадение с двумя 2) < /p>
У меня есть что -то, что у меня есть, что мне очень много, и теперь это так, что у меня есть, так что это так, что у меня есть, так что это так, что у меня есть, так что это так, что у меня есть, так что это так, что у меня есть, так что у меня есть на самом деле. На более быстром способе поиска с сложностью меньшего времени
, что я делал, это работает, в основном проверяет любые точные совпадения в сообщении, а затем снова проходить через набор данных и пройти через каждое слово и использовать STARTSWITH, то убедиться, что нет перекрывающихся результатов, и если существует сохранение только наилучшего соответствия. Код: < /p>
for ref_norm, (ref_raw, brand) in ref_map.items():
if ref_norm in tokens:
if brand == "Richard Mille" and not ref_norm.startswith('rm'):
matched_refs.append(("rm"+ref_norm, "RM"+ref_raw, brand))
else:
matched_refs.append((ref_norm, ref_raw, brand))
# Prepare matches
possible_matches = []
for ref_norm, (ref_raw, brand) in ref_map.items():
if brand == "Richard Mille":
ref_clean = ref_raw.lower()
if ref_clean.startswith("rm") and ref_clean in message.lower():
possible_matches.append((ref_norm, ref_raw, brand))
else:
for word in tokens:
if word.startswith(ref_norm):
possible_matches.append((ref_norm, word, brand))
break
match = re.match(r'^([a-zA-Z]{1,2})(.+)', word)
if match and any(char.isdigit() for char in match.group(2)):
word = match.group(2)
if word.startswith(ref_norm):
possible_matches.append((ref_norm, word, brand))
break
# Sort by length of raw ref descending → longer matches first
possible_matches.sort(key=lambda x: len(x[1]), reverse=True)
# Now pick only non-overlapping matches
used_spans = []
for ref_norm, ref_raw, brand in matched_refs:
ref_lower = ref_raw.lower()
index = message.lower().find(ref_lower)
used_spans.append((index, index + len(ref_lower)))
for ref_norm, ref_raw, brand in possible_matches:
ref_lower = ref_raw.lower()
index = message.lower().find(ref_lower)
if index == -1:
continue
# Check if this index overlaps with previous matches
overlap = any(start
Подробнее здесь: https://stackoverflow.com/questions/795 ... -word-from
Наиболее эффективный способ поиска, если какое -либо слово в сообщении начинается с любого слова из большого набора данн ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Замените «все слово», если «слово» начинается с двоеточия (\b не работает должным образом).
Anonymous » » в форуме Php - 0 Ответы
- 40 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Как перенести слово на предыдущее слово, если не подходит только последнее слово
Anonymous » » в форуме Android - 0 Ответы
- 134 Просмотры
-
Последнее сообщение Anonymous
-