我正在编写一个脚本,以新闻文章作为输入,并返回文章中提到的所有公开交易公司的列表及其相应的符号。有大约6,500个独特的公司名称可以提及。
我的第一个想法是使用正则表达式从文章中提取所有可能是公司名称的名称。公司名称可能会有很大不同,但几乎所有名称中的每个单词都以大写字母开头,所以我认为这可能只会产生一些误报(可能是个人与公司共享名称的情况)。
下一个问题是将可能的公司名称与所有公司和符号列表进行比较。我该如何存储清单?作为一个表格,每个条目都有公司和符号字段?看起来这是使用公司映射到符号的hashmap的理想位置。是否比使用上述映射序列化数组的mysql解决方案更快,并且只是在我的脚本开头查找文章中的名称时将其反序列化?
答案 0 :(得分:3)
我的第一个想法是使用正则表达式从文章中提取所有可能是公司名称的名称。公司名称可能会有很大不同,但几乎所有名称中的每个单词都以大写字母开头,所以我认为这可能只会产生一些误报(可能是个人与公司共享名称的情况)。
为什么我们使用#
或@
等前缀作为标记或名称引用,这有助于创建模式匹配。如果你允许这种规模的“误报”,我想你会在脚下射击。
我会遵循标准的'股票行情'文章格式,包括公司名称或股票格式参考,例如American Company Co. (ACCO)
,这样您就可以只查找(*)
个参考文件。
除了坚持使用某种格式外,您将很难获得快速,相关且准确的结果。
复杂的解决方案是针对误报的服务器端处理,加载完整的名称列表并为匹配进行处理,以及一些带有审核警报的警报系统,但这只是一个很大的开销,当简单的格式调整可以进行时很长的路要走)
答案 1 :(得分:2)
并返回文章中提到的所有上市公司及其相应符号的列表
假设文本没有结构,这将非常困难。
最有效的解决方案是将文章拆分为单词列表并维护出现在公司名称中的单词列表,对于后面列表中的每个条目,进一步列出正则表达式以匹配整个公司名称 - 这将允许您将6500公司名称减少到更小的列表以查找可能的匹配。然后将这些正则表达式应用于原始文本。
是的,在数据库上执行此类操作会快得多 - 但它远非繁琐的任务。