python - spaCy 中的什么工具可用于从股票代码识别公司名称?

标签 python spacy

我正在尝试对财经新闻进行情绪分析,并且希望能够根据股票代码识别公司。例如。从 SPOT 识别 Spotify。最终目标是生成每家公司的情绪模型。 spaCy 非常擅长开箱即用的命名实体识别,但在比较股票代码和公司时却表现不佳。我有一个 csv 格式的股票代码和公司名称列表(来自 NASDAQ、NYSE、AMEX)。

基于在spaCy中使用similarity()函数,到目前为止结果并不好。下表显示了一些相似度较低的公司的样本,尽管名称在视觉上很相似。我想使用公司名称/股票代码列表来训练模型,并在训练过程后获得更高的相似度分数。

+------------+-------------------------+------------+
|   Stock    |          Name           | Similarity |
+------------+-------------------------+------------+
| CSPI stock | CSP Inc.                | 0.072      |
| CHGG stock | Chegg, Inc.             | 0.071      |
| QADA stock | QAD Inc.                | 0.065      |
| SPOT stock | Spotify Technology S.A. | 0.064      |
+------------+-------------------------+------------+

根据 spaCy 的文档,一些工具包括使用 PhraseMatcher , EntityRuler , Rule-based matching , token 匹配器。哪一个最适合这个用例?

最佳答案

我的建议是不要尝试将刻度符号与公司名称相匹配,而是将文本中的公司名称与 CSV 中的公司名称相匹配。您将获得更好更好的结果。

作为模糊匹配,我建议使用 Levenshtein 算法,示例如下: T-SQL Get percentage of character match of 2 strings

对于 Python Levenshtein,我会推荐这个: https://github.com/ztane/python-Levenshtein/#documentation

我个人已经将 EntityRuler 与 jsonl 规则集的组合一起使用

但您必须携带自己的数据。 您需要一个包含股票符号和公司名称的数据库。

nlp = spacy.load('en_core_web_lg')

stock_symbol_shapes_ruler = EntityRuler(nlp)
stock_symbol_shapes_ruler.name="stock_symbol_shapes_ruler"
patterns_stock_symbol_shapes = [            
            {"label": "ORG", "pattern": "NASDAQ"},
            {"label": "STOCK_SYMBOL", "pattern": [{"SHAPE": "XXX.X"}]},         
            {"label": "STOCK_SYMBOL", "pattern": [{"SHAPE": "XXXX.X"}]}, 
            ]
stock_symbol_shapes_ruler.add_patterns(patterns_stock_symbol_shapes)
nlp.add_pipe(stock_symbol_shapes_ruler, before='ner')

stock_symbol_ruler = EntityRuler(nlp).from_disk("./stock_symbol_pattern.jsonl")
stock_symbol_ruler.name = 'stock_symbol_ruler'
nlp.add_pipe(stock_symbol_ruler, before='ner')

company_name_ruler = EntityRuler(nlp).from_disk("./company_name_patterns.jsonl")
company_name_ruler.name="company_name_ruler"
nlp.add_pipe(company_name_ruler, before='ner')
doc = nlp(test_text)

这些文件是使用 SQL 生成的

{"label": "STOCK_SYMBOL", "pattern": "AAON"}
{"label": "STOCK_SYMBOL", "pattern": "AAP"}
{"label": "STOCK_SYMBOL", "pattern": "AAPL"}
{"label": "STOCK_SYMBOL", "pattern": "AAVL"}
{"label": "STOCK_SYMBOL", "pattern": "AAWW"}


{"label": "ORG", "pattern": "AMAG Pharmaceuticals"}
{"label": "ORG", "pattern": "AMAG Pharmaceuticals Inc"}
{"label": "ORG", "pattern": "AMAG Pharmaceuticals Inc."}
{"label": "ORG", "pattern": "AMAG Pharmaceuticals, Inc."}
{"label": "ORG", "pattern": "Amarin"}
{"label": "ORG", "pattern": "Amarin Corporation plc"}
{"label": "ORG", "pattern": "Amazon.com Inc."}
{"label": "ORG", "pattern": "Amazon Inc"}
{"label": "ORG", "pattern": "Amazonm"}

关于python - spaCy 中的什么工具可用于从股票代码识别公司名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56489472/

相关文章:

python - pandas.to_csv 输出一列 float 而不是整数

r - 使用 Quanteda 语料库识别名词

python - 如何使用 spacy_langdetect 包中的 LanguageDetector()?

python-3.x - 我正在执行代码 : nlp. vocab ['Hun' ].vector 并获得 ValueError : [E010] Word vectors set to length 0

python - 使用 PyMSSQL 执行引用链接服务器的存储过程时出错

python - cv2.imshow() 函数如何在 BGR 模型中工作?

python,找到一个数字所属的范围,范围由整数列表组成

python - 将数据库中的所有图像重新采样为相同的体素大小

python - 标记类似 TEI 的文本

python - 在 spaCy 管道中对自定义组件进行基准测试的最佳方法是什么?