高亮標紅

簡單實用玛追,哈哈税课。
轉(zhuǎn)載原文地址:點擊這里

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.Comparator;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;

public class Highlighter {
    public static void main(String[] args) throws IOException {
        String content = "挖掘頻繁項集的方法可以擴展到挖掘閉頻繁項集(由它們?nèi)菀讓С鲱l繁項集的集合)。這些方法結(jié)合了附加的優(yōu)化技術(shù)痊剖,如項合并韩玩、子項剪枝和項跳過,以及模式樹中產(chǎn)生的項集的有效子集檢查陆馁。"
                + "挖掘頻繁項集和關(guān)聯(lián)已經(jīng)用不同的方法擴展找颓,包括挖掘多層關(guān)聯(lián)規(guī)則和多維關(guān)聯(lián)規(guī)則。多層關(guān)聯(lián)規(guī)則可以根據(jù)每個抽象層的最小支持度閾值如何定義叮贩,使用多種策略挖掘击狮。如一致的支持度、遞減的支持度和基于分組的支持度益老。"
                + "冗余的多層(后代)關(guān)聯(lián)規(guī)則可以刪除彪蓬,如果根據(jù)其對應(yīng)的祖先規(guī)則,他們的支持度和置信度接近于期望值的話捺萌。挖掘多維關(guān)聯(lián)規(guī)則的技術(shù)可以根據(jù)對量化屬性的處理分為若干類寞焙。第一,量化屬性可以根據(jù)預定義的概念分層靜態(tài)離散化互婿。"
                + "數(shù)據(jù)立方體非常適合這種方法捣郊,因為數(shù)據(jù)立方體和量化屬性都可以利用概念分層。第二慈参,可以挖掘量化關(guān)聯(lián)規(guī)則呛牲,其中量化屬性根據(jù)分箱和/或聚類動態(tài)離散化,“鄰近的”關(guān)聯(lián)規(guī)則可以用聚類合并驮配,產(chǎn)生更簡潔娘扩、更有意義的規(guī)則。"
                + "基于約束的規(guī)則挖掘允許用戶通過提供元規(guī)則(即模式模板)和其他挖掘約束對規(guī)則搜索聚焦壮锻。這種挖掘推動了說明性數(shù)據(jù)挖掘查詢語言和用戶界面的使用琐旁,并對挖掘查詢優(yōu)化提出了巨大挑戰(zhàn)。"
                + "規(guī)則約束可以分為五類:反單調(diào)的猜绣、單調(diào)的灰殴、簡潔的、可轉(zhuǎn)變的和不可轉(zhuǎn)變的掰邢。前四類約束可以在頻繁項集挖掘中使用牺陶,使挖掘更有功效伟阔,更有效率。沒有進一步分析或領(lǐng)域知識掰伸,關(guān)聯(lián)規(guī)則不應(yīng)該直接用于預測皱炉。"
                + "它們不必指示因果關(guān)系。然而狮鸭,對于進一步探查合搅,它們是有幫助的切入點,使得它們成為理解數(shù)據(jù)的流行工具歧蕉。流數(shù)據(jù)不斷地在計算機系統(tǒng)中流進流出并且具有變化的更新速度历筝,涉及數(shù)據(jù)流的應(yīng)用非常廣泛。"
                + "大綱提供數(shù)據(jù)流的匯總廊谓,通常用來返回查詢的近似解答梳猪。隨機抽樣、滑動窗口蒸痹、直方圖春弥、多分辨率方法、梗概以及隨機算法都是大綱的形式叠荠。傾斜時間框架模型允許數(shù)據(jù)以多個時間粒度存儲匿沛,最近的時間記錄在最細的粒度上,"
                + "最遠的時間記錄在最粗的粒度上榛鼎。流立方體可以存儲壓縮的數(shù)據(jù)逃呼,對時間維度使用傾斜時間框架模型,并且僅在一些關(guān)鍵的層上存儲數(shù)據(jù)者娱,關(guān)鍵層反映了分析人員最感興趣的數(shù)據(jù)層抡笼,從而基于到關(guān)鍵層的“常用路徑”進行部分物化。";

        String query = "數(shù)據(jù)挖掘";
        long start = System.currentTimeMillis();
        
        String s = new Highlighter(query).getBestFragment(content);
        
        System.out.println("Generate HTML: ");
        File f = new File("demo.html");
        OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(f), "utf-8");
        osw.write("<pre><b>" + content + "</pre><br/><br/>" + "<pre><b>" + s + "</pre><br/><br/>");
        osw.close();

        System.out.println("Hightlighter -> " + s);
        System.out.println("cost: " + (System.currentTimeMillis() - start));
    }

    private static String BEGIN = "<font color=\"red\">";
    private static String END = "</font>";

    private Set<Character> set = new HashSet<Character>();

    public Highlighter(String query) {
        char[] chars = null;
        chars = query.toCharArray();
        for (int i = 0; i < chars.length; i++) {
            set.add(chars[i]);
        }
    }

    public String getBestFragment(String content) {
        String[] strs = content.replace(".", "黄鳍。").split("推姻。");
        char[] chars = null;

        TreeSet<Sentence> ts = new TreeSet<Sentence>(new Comparator<Sentence>() {
            public int compare(Sentence o1, Sentence o2) {
                if (o1.getIndex() < o2.getIndex()) {
                    return -1;
                } else if (o1.getIndex() > o2.getIndex()) {
                    return 1;
                } else
                    return 0;
            }
        });
        Sentence sentence = null;
        int score = 0;
        StringBuilder sb = null;
        System.out.println("total sentences: " + strs.length);
        for (int i = 0; i < strs.length; i++) {
            sentence = new Sentence();
            sb = new StringBuilder();
            sentence.setIndex(i);
            sentence.setText(strs[i]);
            chars = strs[i].toCharArray();
            for (int j = 0; j < chars.length; j++) {
                if (set.contains(chars[j])) {
                    score++;
                    sb.append(BEGIN);
                    sb.append(chars[j]);
                    sb.append(END);
                } else {
                    sb.append(chars[j]);
                }
            }
            sentence.setValue(sb.toString());
            sentence.setScore(score);
            ts.add(sentence);
            score = 0;
            sb = new StringBuilder();
        }

        Iterator<Sentence> it = ts.iterator();
        Sentence tmp = null;
        int number = 0;
        sb = new StringBuilder();
        for (; it.hasNext();) {
            tmp = it.next();
            sb.append(tmp.getValue());
            sb.append("。");
            System.out.println(tmp);
            number++;
        }

        System.out.println("After : " + number);
        return sb.toString();
    }

    class Sentence {
        String value;
        int index;
        int score;
        String text;

        public String getValue() {
            return value;
        }

        public void setValue(String value) {
            this.value = value;
        }

        public int getIndex() {
            return index;
        }

        public void setIndex(int index) {
            this.index = index;
        }

        public int getScore() {
            return score;
        }

        public void setScore(int score) {
            this.score = score;
        }

        public String toString() {
            return this.index + " " + this.score + "  " + this.value;
        }

        public String getText() {
            return text;
        }

        public void setText(String text) {
            this.text = text;
        }
    }
}

想了解更多精彩內(nèi)容請關(guān)注我的公眾號

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末框沟,一起剝皮案震驚了整個濱河市藏古,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌忍燥,老刑警劉巖拧晕,帶你破解...
    沈念sama閱讀 221,695評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異梅垄,居然都是意外死亡厂捞,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蔫敲,“玉大人饲嗽,你說我怎么就攤上這事炭玫∧魏伲” “怎么了?”我有些...
    開封第一講書人閱讀 168,130評論 0 360
  • 文/不壞的土叔 我叫張陵吞加,是天一觀的道長裙犹。 經(jīng)常有香客問我,道長衔憨,這世上最難降的妖魔是什么叶圃? 我笑而不...
    開封第一講書人閱讀 59,648評論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮践图,結(jié)果婚禮上掺冠,老公的妹妹穿的比我還像新娘。我一直安慰自己码党,他們只是感情好德崭,可當我...
    茶點故事閱讀 68,655評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著揖盘,像睡著了一般眉厨。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上兽狭,一...
    開封第一講書人閱讀 52,268評論 1 309
  • 那天憾股,我揣著相機與錄音,去河邊找鬼箕慧。 笑死服球,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的颠焦。 我是一名探鬼主播有咨,決...
    沈念sama閱讀 40,835評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼蒸健!你這毒婦竟也來了座享?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,740評論 0 276
  • 序言:老撾萬榮一對情侶失蹤似忧,失蹤者是張志新(化名)和其女友劉穎渣叛,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體盯捌,經(jīng)...
    沈念sama閱讀 46,286評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡淳衙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,375評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片箫攀。...
    茶點故事閱讀 40,505評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡肠牲,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出靴跛,到底是詐尸還是另有隱情缀雳,我是刑警寧澤,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布梢睛,位于F島的核電站肥印,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏绝葡。R本人自食惡果不足惜深碱,卻給世界環(huán)境...
    茶點故事閱讀 41,873評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望藏畅。 院中可真熱鬧敷硅,春花似錦、人聲如沸愉阎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽诫硕。三九已至坦辟,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間章办,已是汗流浹背锉走。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留藕届,地道東北人挪蹭。 一個月前我還...
    沈念sama閱讀 48,921評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像休偶,于是被迫代替她去往敵國和親梁厉。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,515評論 2 359

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

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,285評論 25 707
  • 整天忙于指和屏幕的觸動踏兜。吃沒有營養(yǎng)的 零食词顾,看沒有營養(yǎng)的news。聽爛熟于心的歌碱妆,把衣服放亂了等著天黑肉盹,明日又嶄新...
    祈妖乖閱讀 178評論 0 0
  • 那時,日出東方 我離開了港灣 離開后疹尾,人跡罕至的航線上 我有一只小鐵船 曾經(jīng)上忍,癡迷于磁石 我也經(jīng)歷過磁變 經(jīng)歷中骤肛,...
    CCHarbour閱讀 344評論 0 2