[*]
У меня есть:
- Фрейм данных с идентификаторами (
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
