500. 反向索引

描述

創(chuàng)建給定文檔的反向索引
確保數(shù)據(jù)不包含標點符號.

樣例

給出一個包括id與內(nèi)容的文檔list(我們提供了document類)

[
{
"id": 1,
"content": "This is the content of document 1 it is very short"
},
{
"id": 2,
"content": "This is the content of document 2 it is very long bilabial bilabial heheh hahaha ..."
},
]
返回一個反向索引(hashmap的key是單詞, value是文檔的id).
{
"This": [1, 2],
"is": [1, 2],
...
}

說明
文檔是有許多的單詞組成的妆丘,其中每個單詞也可以在同一個文檔中重復出現(xiàn)很多次锄俄,當然,同一個單詞也可以出現(xiàn)在不同的文檔中勺拣。

  1. 正排索引(forward index):從文檔角度看其中的單詞奶赠,表示每個文檔(用文檔ID標識)都含有哪些單詞,以及每個單詞出現(xiàn)了多少次(詞頻)及其出現(xiàn)位置(相對于文檔首部的偏移量)药有。
  2. 倒排索引(inverted index毅戈,或inverted files):從單詞角度看文檔,標識每個單詞分別在那些文檔中出現(xiàn)(文檔ID)愤惰,以及在各自的文檔中每個單詞分別出現(xiàn)了多少次(詞頻)及其出現(xiàn)位置(相對于該文檔首部的偏移量)苇经。

簡單記為:正排索引:文檔 ---> 單詞倒排索引:單詞 ---> 文檔
倒排索引有著廣泛的應用場景,比如搜索引擎宦言、大規(guī)模數(shù)據(jù)庫索引扇单、文檔檢索、多媒體檢索/信息檢索領域等等奠旺≈├剑總之,倒排索引在檢索領域是很重要的一種索引機制响疚。

代碼

/**
 * Definition of Document:
 * class Document {
 *     public int id;
 *     public String content;
 * }
 */
public class Solution {
    /**
     * @param docs a list of documents
     * @return an inverted index
     */
    // 正向索引是遍歷文件查找關鍵詞
    // 反向索引是通過關鍵詞得到具有該關鍵詞的文件 id
    public Map<String, List<Integer>> invertedIndex(List<Document> docs) {
        Map<String, List<Integer>> results = new HashMap<String, List<Integer>>();
        for (Document doc : docs) {
            int id = doc.id;
            StringBuffer temp = new StringBuffer("");
            String content = doc.content;
            int n = content.length();
            for (int i = 0; i < n; ++i) {
                // if 判斷條件成立表示遍歷完了一個關鍵詞
                // temp 一次只存儲一個關鍵詞
                if (content.charAt(i) == ' ') {
                    insert(results, temp.toString(), id);
                    temp = new StringBuffer("");
                } else
                    temp.append(content.charAt(i));
            }
            // 最后一個關鍵詞的插入
            insert(results, temp.toString(), id);
        }
        return results;
    }

    // insert 功能把關鍵字和 id 對應
    // tmp 即為關鍵字
    public void insert(Map<String, List<Integer>> rt, String tmp, int id) {
        // tmp 關鍵字不存在
        if (tmp.equals("") || tmp == null)
            return;
        // 建立 HashMap 
        if (!rt.containsKey(tmp))
            rt.put(tmp, new ArrayList<Integer>());
        
        int n = rt.get(tmp).size();
        // hash 表中的 id 的內(nèi)容不存在或者已經(jīng)存在的 id 和要添加的 id 不一致兼都,把 id 加入 hash 表
        if (n == 0 || rt.get(tmp).get(n - 1) != id)
            rt.get(tmp).add(id);
    }
}
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市稽寒,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌趟章,老刑警劉巖杏糙,帶你破解...
    沈念sama閱讀 221,888評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件慎王,死亡現(xiàn)場離奇詭異,居然都是意外死亡宏侍,警方通過查閱死者的電腦和手機赖淤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來谅河,“玉大人咱旱,你說我怎么就攤上這事”了#” “怎么了吐限?”我有些...
    開封第一講書人閱讀 168,386評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長褂始。 經(jīng)常有香客問我诸典,道長,這世上最難降的妖魔是什么崎苗? 我笑而不...
    開封第一講書人閱讀 59,726評論 1 297
  • 正文 為了忘掉前任狐粱,我火速辦了婚禮,結果婚禮上胆数,老公的妹妹穿的比我還像新娘肌蜻。我一直安慰自己,他們只是感情好必尼,可當我...
    茶點故事閱讀 68,729評論 6 397
  • 文/花漫 我一把揭開白布蒋搜。 她就那樣靜靜地躺著,像睡著了一般胰伍。 火紅的嫁衣襯著肌膚如雪齿诞。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,337評論 1 310
  • 那天骂租,我揣著相機與錄音祷杈,去河邊找鬼。 笑死渗饮,一個胖子當著我的面吹牛但汞,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播互站,決...
    沈念sama閱讀 40,902評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼私蕾,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了胡桃?” 一聲冷哼從身側響起踩叭,我...
    開封第一講書人閱讀 39,807評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后容贝,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體自脯,經(jīng)...
    沈念sama閱讀 46,349評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,439評論 3 340
  • 正文 我和宋清朗相戀三年斤富,在試婚紗的時候發(fā)現(xiàn)自己被綠了膏潮。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,567評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡满力,死狀恐怖焕参,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情油额,我是刑警寧澤叠纷,帶...
    沈念sama閱讀 36,242評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站悔耘,受9級特大地震影響讲岁,放射性物質發(fā)生泄漏。R本人自食惡果不足惜衬以,卻給世界環(huán)境...
    茶點故事閱讀 41,933評論 3 334
  • 文/蒙蒙 一缓艳、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧看峻,春花似錦阶淘、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,420評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至冯勉,卻和暖如春澈蚌,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背灼狰。 一陣腳步聲響...
    開封第一講書人閱讀 33,531評論 1 272
  • 我被黑心中介騙來泰國打工宛瞄, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人交胚。 一個月前我還...
    沈念sama閱讀 48,995評論 3 377
  • 正文 我出身青樓份汗,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蝴簇。 傳聞我的和親對象是個殘疾皇子杯活,可洞房花燭夜當晚...
    茶點故事閱讀 45,585評論 2 359

推薦閱讀更多精彩內(nèi)容

  • Solr&ElasticSearch原理及應用 一、綜述 搜索 http://baike.baidu.com/it...
    樓外樓V閱讀 7,305評論 1 17
  • 這個系列的第六個主題熬词,主要談一些搜索引擎相關的常見技術旁钧。 1995年是搜索引擎商業(yè)公司發(fā)展的重要起點吸重,《淺談推薦系...
    我偏笑_NSNirvana閱讀 6,636評論 3 24
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn)歪今,斷路器晤锹,智...
    卡卡羅2017閱讀 134,702評論 18 139
  • 見其名知其意,有倒排索引彤委,對應肯定,有正向索引或衡。正向索引(forward index)焦影,反向索引(inverted...
    時待吾閱讀 1,070評論 0 0
  • 11月20天,星期一封断,晴 今天中午斯辰,根據(jù)預約,女兒入選了大荔"飛揚的紅領巾"優(yōu)秀少先隊員時代影像風采展坡疼,去金色童年...
    月兒貝貝閱讀 252評論 0 0