2017-04-13 46 views
0

語言本身並不重要,但我想我會堅持使用Javascript。Javascript - 最有效的方式來搜索數以千計的單詞的文字?

本質上,我每個月都有成千上萬的「評論」,並且希望通過自動化獲得一份天真的快樂「評估」,並在這些評論中搜索10,000個單詞(每個評論的平均單詞數爲21個單詞,遠)。

公式的工作方式(從Hedonometer借用) - 將文本中每個單詞的「幸福」得分(如果在10k列表中找到)取平均值。

我會測試一些東西,也許編輯回來的結果在這裏,但我甚至不知道從哪裏開始。似乎是非常繁重的數據提取(雖然只需要按照課程評論進行一次) - 也許它更適合於R或SQL(可能不適用),但不確定。

我相信這個問題有時候被稱爲'詞袋'或'詞頻飽和度'。

+0

「最有效的」依賴於一堆因素.... – epascarello

+0

呀做一些閱讀和教訓有很多複雜的快速字符串搜索方法上地獄。嗯。也許我會在維基百科的一些簡單的方法,看看處理時間是否可以接受。 – user45867

回答

1

你可以創建你的話,像這樣(略)哈希表:

let wordRanks = {'hate':-100,'love':100,'ok':10}; 

然後有一個這樣的字符串,並將其分割成單詞。

let str = `I hate love it's just ok`; 
let words = str.split(' '); 

然後你就可以通過的話迭代,並得到一個分數:

let commentScore = 0; 
words.forEach(function(word){ 
    if(wordRanks[word]){ 
    commentScore += parseInt(wordRanks[word]) 
    } 
}); 
console.log(commentScore); //should be 10 

使用哈希表的不應該是查找計算昂貴。應該工作,雖然你可能要拆分的話更好地刪除尾隨標點符號,因爲我有愛後一個逗號在我最初的代碼,它給了錯誤的結果,因爲沒有爲沒有哈希表匹配「愛」

+0

嗯非常有趣。我會試着去測試一下。事情是,根據Hedonometer期刊論文,他們沒有總結單詞分數,他們對它們進行了平均。因此,在你虛構的例子中,平均值將是3.33(10/3) - 實際上,'分數'這個詞是從1-10開始的,因此沒有負面因素。肯定會嘗試這個,看看從時間的角度來看是否可行,謝謝。 – user45867

+0

酷,希望你應該能夠適應這種方法,無論你的評分系統是什麼,只要你瞭解循環和哈希表背後的代碼。如果您正在處理浮動數字,那麼parseInt也可能是parseFloat。 – chairmanmow

+0

這種方法的更新:它的工作速度驚人地超出了我的預期。在一臺平庸的計算機上,它應用並在9秒內對1000個21-avg-word-comments進行評分。可能不是最優化的方法,但肯定有效。每個月有大約2-3k條評論,大約18-27秒。只有'不雅'部分是在Javascript中獲取單詞列表。 10k列表是靜態的,所以我只是使用一些處理將HUGE列表放在一個Javascript行上,但是想知道是否有更好的方法來維護這個列表,通過SQL或其他格式。謝謝! – user45867

1

我肯定會去Python's Natural Language Toolkit (NLTK)它帶有一組功能,可以讓你的生活更輕鬆,如文本頻率,刪除重複項,刪除停用詞,查找同義詞等,這個想法正在減少大小你的文字儘可能做情感分析。

在一個類似的項目我的做法是:

  1. 刪除中性詞,代詞,介詞,限定詞,姓名等
  2. 刪除重複。
  3. 當我進入文本並從文本的其餘部分刪除它們時,檢查單詞同義詞。
  4. 動態創建一個段落的情感閾值分數,所以一旦達到了那個分數,我就會停止對該段落進行處理並轉到下一個段落,對於整體文本也是如此。

希望這個作品!

+0

感謝 - 在該網站的偉大指南,也。是的,我不是想徹底重新發明輪子。我會通讀一遍。 – user45867

+0

這是一個註釋,如果你做了類似的事情,如果你刪除了同義詞或重複項,他們應該添加到總譜中,所以如果你從段落中刪除了「笑」這個單詞6次,並且不計算6次迭代,這個特定的段落最可能有錯誤的分數。 NLTK還有一套很好的工具用於分析上下文,這非常有用,像「哭泣」這樣的詞語可能意味着悲傷或憤怒,因此語境很重要。 – Boris

+0

我試圖複製Hedonometer的方法,僅僅是因爲它看起來從他們自己的內部測試中是健壯的。是的,他們一次次地重複或重複三次。他們沒有考慮上下文。當然,我不會精確準確(人類評估可以做到這一點) - 更多的是通過分數/基本分類的初始傳球。但是,是的,即使是這個平均分詞快樂評分的「簡單」模型 - 在技術上很難實現,至少對我來說現在是這樣。 – user45867

相關問題