r'\b(?:(can)|(could))\b'
намного быстрее, чем r'(\bcan\b)|(\bcould\b)'
.Это имеет смысл, поскольку первый шаблон начинает выглядеть за пределами слов и является более эффективным.Что меня озадачивает, так это то, что эти два шаблона генерируют немного разные результаты с re.findall
для моих списков ключевых слов и документов.Изменение кода делает сопоставление намного быстрее, но я не могу повторить свои предыдущие результаты.
Эти две модели кажутся мне эквивалентными, за исключением разницы в эффективности.Я что-то упустил?
Мой шаблон выглядит следующим образом, и его можно найти ЗДЕСЬ Входные данные слишком велики для публикации.Это текстовые файлы, содержащие десятки тысяч слов.
\b(?:(Anti-takeover (?:provisions|provision))|(Bank debt[s]?)|(Capital
(?:expenditure|expenditures))|(Capital (?:lease|leases))|(Chapter 11)|
(Chapter 7)|(Chapter 9)|(Collateral[s]?)|(Concentrated ownership[s]?)|
(Covenant|covenants)|(Credit (?:facility|facilities))|(Credit rating[s]?)|
(Credit risk[s]?)|(Debt burden[s]?)|(Decline in stock price[s]?)|
(Default[s]?|defaulted)|(Defined Benefit[s]?)|(Dilution[s]?)|(Dividend[s]?)|
(Downgrade[s]?)|(Family)|(Financial condition[s]?)|(Financing cost[s]?)|
(Funded status)|(Illiquid market[s]?)|(Improvements)|(Indebtedness)|(Insider
sales)|(Investment[s]? in equipment)|(Investment[s]? in plant[s]?)|(Lease
(?:commitment|commitments))|(lease|leases|leasing)|(Leverage[s]?)|
(Leveraged (?:lease|leases))|(Limited trading)|(Liquidity|Liquidities)|
(Loan[s]?)|(Locked-in (?:lease|leases))|(Mandatory contribution[s]?)|
(Maturity|maturities)|(Negative operating cash flow[s]?)|(New financing)|(?
-i:O.P.E.B.)|(Obligations)|(?-i:OPEB)|(Operating losses)|(Penny stock[s]?)|
(Postretirement[s]?)|(Rating[s]?)|(Refinance)|(Refinancing)|(Reinsurance)|
(Renegotiation[s]?)|(Reorganization[s]?)|(Reserves)|(Revolver[s]?)|(Sale
of productive assets)|(Stock market listing)|(Stock price
(?:volatility|volatilities))|(Stock price drop[s]?)|(Underfunded
pensions)|(Underwriting)|(Volatility of operating results)|(Volatility of
revenues)|(Volatility of sales)|(Working capital[s]?))\b
Я понимаю, что регулярное выражение не элегантно.Он был создан из списка ключевых слов.Некоторые ключевые слова находятся в смешанных формах, таких как «положения | предоставление»."Положение [s]?"или просто "провизия"?было бы лучше.Я сделал некоторые изменения, но не все.Первоначально он был сгенерирован:
re_fin = '|'.join(r'((?-i:\b{}\b))'.format(k) if k.upper() == k else
r'(\b{}\b)'.format(k) for k in keywords])
Я обнаружил, что это очень медленно, и изменил его на следующее (чтобы показать все шаги):
patterns = [r"(?-i:{})".format(k) if k.upper() == k else r"({})".format(k)
for k in keywords]
patterns = "|".join(patterns)
patterns = r"\b(?:{})\b".format(patterns)