Мартикс количества регулярных выражений попадает в список строк

[*]

У меня есть:

  • Фрейм данных с идентификаторами (TermId) и поисковые запросы (SearchTerm).
  • Список текстовых строк (MyText). Скорее всего, это будет столбец (серия) во фрейме данных.

Я за каждую строку в MyText Я хочу получить количество совпадений для каждого регулярного выражения SearchTerm, создавая таблицу подсчетов. Это уменьшенный пример. У меня было бы 10 000 Mytext и сотни SearchTermс. Я новичок в Python (из R) и хотел бы знать, где я могу оптимизировать код, чтобы сделать его более производительным? Я открыт для любых отзывов, которые люди могут предложить по всем аспектам кода.

## Dependencies
import re
import pandas as pd

## Data
MyText = ['I saw xx.yy and also xx.yyy', 'FireFly* this is xx_yy there', 'I xx$YY', 'I see x.yy now .NET', 'now xx.yyxx.yyxx.yy']
 
MyDictionary = pd.DataFrame({
    'TermId': ['SK_{}'.format(x) for x in list(range(0, 6))],
    'SearchTerm': ['xx[.]yy', '[.]NET', 'A[+]', 'FireFly[*]', 'NetFlix[$]',  'Adobe[*]']
})


## Convert Search Term to Compiled Regex Object
MyDictionary['Regexes'] = [re.compile(s) for s in MyDictionary['SearchTerm']]

## List comprehension to double loop over the regexes &  
## elements of MyText to count hits
out = {id: [len(regex.findall(s)) for s in MyText] for regex, id in zip(MyDictionary['Regexes'], MyDictionary['TermId'])}
out = pd.DataFrame(out)
out['MyText'] = MyText

## Results
print(out)
print(MyDictionary)

Что дает:

   SK_0  SK_1  SK_2  SK_3  SK_4  SK_5                        MyText
0     2     0     0     0     0     0   I saw xx.yy and also xx.yyy
1     0     0     0     1     0     0  FireFly* this is xx_yy there
2     0     0     0     0     0     0                       I xx$YY
3     0     1     0     0     0     0           I see x.yy now .NET
4     3     0     0     0     0     0           now xx.yyxx.yyxx.yy

0

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *