首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在spaCy中使用什么工具来从股票代码中识别公司名称?

在spaCy中使用什么工具来从股票代码中识别公司名称?
EN

Stack Overflow用户
提问于 2019-06-07 15:04:41
回答 4查看 2.1K关注 0票数 3

我正在尝试对财经新闻进行情感分析,我希望能够根据股票代码来识别公司。例如:从SPOT识别Spotify。最终目标是生成每个公司的情绪模型。spaCy非常擅长开箱即用的命名实体识别,但在比较股票代码和公司时,它做得不够好。我有一个csv格式的股票代码和公司名称(来自纳斯达克,纽约证券交易所,美国证券交易所)的列表。

基于使用spaCy中的相似度()函数,到目前为止结果还不是很好。下表显示了一些公司的样本,这些公司的相似度得分很低,尽管这些公司的名称在视觉上是相似的。我希望使用公司名称/股票代码符号列表来训练模型,并且在此训练过程之后具有更高的相似性分数。

代码语言:javascript
复制
+------------+-------------------------+------------+
|   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的文档,一些工具包括使用PhraseMatcherEntityRulerRule-based matching和令牌匹配器。哪一个最适合这个用例?

EN

回答 4

Stack Overflow用户

发布于 2019-06-09 18:35:18

您可以训练sense2vec模型,然后将它们与spaCy结合使用。他们齐头并进的很好。https://github.com/explosion/sense2vec

sense2vec将帮助你识别SPOT在某个上下文中与Spotify相似。

票数 1
EN

Stack Overflow用户

发布于 2019-12-03 01:52:39

我推荐尝试使用fuzzywuzzy library..it,它非常容易使用,我认为它可以很好地满足您的情况。在这里可以找到一个很好的例子:https://towardsdatascience.com/natural-language-processing-for-fuzzy-string-matching-with-python-6632b7824c49

票数 1
EN

Stack Overflow用户

发布于 2020-07-16 16:38:09

我的建议是,不要尝试将刻度符号与公司名称进行匹配,而是将文本中的公司名称与您在text中的公司名称进行匹配。你会得到更好的结果。

作为模糊匹配,我推荐使用Levenshtein algoritm,示例如下:T-SQL Get percentage of character match of 2 strings

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

我个人使用过EntityRuler和jsonl规则集的组合。

但你必须带上你自己的数据。您需要一个带有股票代码和公司名称的DB。

代码语言:javascript
复制
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生成的

代码语言:javascript
复制
{"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"}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56489472

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档