Я пытаюсь найти близкие совпадения между строкой текста и двумя столбцами моего фрейма данных - «тикеры» и / или «компания».
Это пример фрейма данных:
cik | tickers | company |
--------------------------------------------------
1090872 | A | Agilent Technologies Inc |
--------------------------------------------------
4281 | AA | Alcoa Inc |
--------------------------------------------------
6201 | AAL | American Airlines Group Inc|
--------------------------------------------------
8177 | AAME | Atlantic American Corp |
--------------------------------------------------
706688 | AAN | Aarons Inc |
--------------------------------------------------
320193 | AAPL | Apple Inc |
--------------------------------------------------
И вот как может выглядеть какой-то текст:
text = 'consectetur elementum Apple Inc Agilent Inc. Aenean porttitor porta magna AA American Airlines AAMC Aarons Inc AAPL e plumbs ernum. AA'
Я хотел бы найти все близкие совпаденияв этом тексте и сделайте вывод примерно таким:
The following companies were found in 'text':
- AAPL: Apple Inc
- A: Agilent Technologies Inc
- AA: American Airlines Group Inc
- AAN: Aarons Inc
Вот код, который у меня есть до сих пор, но он неполон, и я понимаю, что ему нужен другой подход:
import pandas as pd
import re
data = {'cik': ['1090872', '4281', '6201', '8177', '706688', '320193'], 'ticker': ['A', 'AA', 'AAL', 'AAME', 'AAN', 'AAPL'], 'company': ['Agilent Technologies Inc', 'Alcoa Inc', 'American Airlines Group Inc', 'Atlantic American Corp', 'Aarons Inc', 'Apple Inc']}
df = pd.DataFrame(data, columns=['cik', 'ticker', 'company'])
text = 'consectetur elementum Apple Inc Agilent Inc. Aenean porttitor porta magna AA American Airlines AAMC Aarons Inc AAPL e plumbs ernum. AA'
ticker = df['ticker']
regex = re.compile(r"\b(?:" + "|".join(map(re.escape, ticker)) + r")\b")
matches = re.findall(regex, text)
for match in matches:
print(match)