Я использую следующий код для замены строк в words
на words[0]
в заданном sentences
.
import re
sentences = ['industrial text minings', 'i love advanced data minings and text mining']
words = ["data mining", "advanced data mining", "data minings", "text mining"]
start_terms = sorted(words, key=lambda x: len(x), reverse=True)
start_re = "|".join(re.escape(item) for item in start_terms)
results = []
for sentence in sentences:
for terms in words:
if terms in sentence:
result = re.sub(start_re, words[0], sentence)
results.append(result)
break
print(results)
Мой ожидаемый результат выглядит следующим образом:
[industrial text minings', 'i love data mining and data mining]
Тем не менее, я получаю следующее:
[industrial data minings', 'i love data mining and data mining]
В первом предложении text minings
нет в words
.Тем не менее, он содержит «интеллектуальный анализ текста» в списке слов, поэтому условие «интеллектуальный анализ текста» в «промышленные текстовые анализ» становится True
Затем, после замены, «извлечение текста» становится «извлечением данных», где символ «s» остается на том же месте.Я хочу избежать таких ситуаций.
Поэтому мне интересно, есть ли способ использовать условие if в re.sub
, чтобы увидеть, является ли следующий символ пробелом или нет.Если пробел, сделайте замену, иначе не делайте этого.
Я также доволен другими решениями, которые могут решить мою проблему.