Я пытаюсь найти эффективный способ обработки списка текстовых записей и определения текстовых шаблонов, обычно используемых в записях, сохраняя только фиксированную часть и абстрагируя переменную, а также подсчитывая количество записей, соответствующих каждому идентифицированному шаблону.
-
Моя самая успешная попытка решить эту проблему - разбить текстовые записи на массивы слов, сравнить массивы слова одного размера для каждого слова, чтобы записать шаблоны, найденные в списке шаблонов.
Как и следовало ожидать, он не идеален и борется за наборы данных, длина которых превышает 50 000 записей.
Мне было интересно, если бы были какие-то библиотеки классификации текста, которые были бы более эффективной или более быстрой логикой для улучшения производительности, мой текущий код очень наивен ...
-
Это моя первая попытка в Python, использующая очень простую логику.
samples = ['Your order 12345 has been confirmed. Thank you',
'Your order 12346 has been confirmed. Thank you',
'Your order 12347 has been confirmed. Thank you',
'Your order 12348 has been confirmed. Thank you',
'Your order 12349 has been confirmed. Thank you',
'The code for your bakery purchase is 1234',
'The code for your bakery purchase is 1237',
'The code for your butcher purchase is 1232',
'The code for your butcher purchase is 1231',
'The code for your gardening purchase is 1235']
samples_split = [x.split() for x in samples]
identified_templates = []
for words_list in samples_split:
for j,words_list_ref in enumerate(samples_split):
template = str()
if len(words_list) != len(words_list_ref) or words_list==words_list_ref:
continue
else:
for i,word in enumerate(words_list):
if word == words_list_ref[i]:
template += ' '+word
else:
template += ' %'
identified_templates.append(template)
templates = dict()
for template in identified_templates:
if template not in templates.keys():
templates[template]=1
templates_2 = dict()
for key, value in templates.items():
if '% % %' not in key:
templates_2[key]=1
print(templates_2)
В идеале код должен принимать следующие данные:
- “Your order tracking number is 123”
- “Thank you for creating an account with us”
- “Your order tracking number is 888”
- “Thank you for creating an account with us”
- “Hello Jim, what is your issue?”
- “Hello Jack, what is your issue?”
и выведите список шаблонов, а также количество записей, которым они соответствуют.
- “Your order tracking number is {}”,2
- “Thank you for creating an account with us”,2
- “Hello {}, what is your issue?”,2