2012-01-10 46 views
4

我正在編寫一個腳本,它將新聞文章作爲輸入並返回文章中提及的所有上市公司的列表及其相應的符號。有大約6500個獨特的公司名稱可以提及。用許多不同的查詢搜索文檔

我的第一個想法是使用正則表達式從文章中提取可能是公司名稱的所有名稱。公司名稱可能完全不同,但名稱中的每個詞幾乎總是以大寫字母開頭,所以我認爲這可能僅適用於少數誤報(可能是個人與公司共享名稱的情況)。

下一個問題是將可能的公司名稱與所有公司和符號列表進行比較。我應該如何儲存清單?作爲每個條目都有公司和符號字段的表格?看起來這是使用公司映射到符號的散列表的理想場所。它會比mysql解決方案更快地使用上述映射序列化一個數組,並且在我的腳本的開頭反序列化它,以便在文章中查找名稱?

回答

3

我的第一個想法是使用正則表達式從文章中提取可能是公司名稱的所有名稱。公司名稱可能完全不同,但名稱中的每個詞幾乎總是以大寫字母開頭,所以我認爲這可能僅適用於少數誤報(可能是個人與公司共享名稱的情況)。

還有就是爲什麼我們使用的標籤或名稱前綴轉診像#@有原因的,它有助於創建一個模式匹配。我認爲如果你允許在這個範圍內出現「誤報」,你會在腳下射擊自己。

我會按照標準'股票行情'的文章格式,包括公司名稱或股票格式參考如American Company Co. (ACCO),這將允許您只需尋找(*)參考。

除了堅持使用某種格式,您將很難獲得快速,相關且準確的結果。

複雜的解決方案是服務器端處理誤報,加載完整的名稱列表並加快搜索匹配,某些警報系統帶有檢查警報,但這只是非常多的開銷,當一個簡單的格式調整可以走很遠)

2

,並返回在文章中提到的所有上市公司和其相應的符號

假如沒有什麼結構,這將是非常困難的文本列表。

最有效的解決方案是將文章分成單詞列表並維護出現在公司名稱中的單詞列表,並且對於後一列表中的每個條目,進一步列出正則表達式以匹配滿公司名稱 - 這將允許您將6500個公司名稱縮減爲更小的列表,以查找潛在的匹配項。然後將這些正則表達式應用於原始文本。

是的,在數據​​庫上進行這種操作將會快得多 - 但它遠不是一項簡單的任務。