java 板


LINE

目前正在使用java實作data mining的方法... 實作中,在想一個問題,就是字串比對 怎樣的字串比對才有效率? 例如: input的字串:2 5 7 8 10 15 19 比對字串的陣列:{2 10, 5 8 19, 3 7 10 13} 還有一個map在記錄count 動作是input的字串會分別跟這三個比對, 看是不是在input中有出現, 有出現的話就在map中+1動作 input的資料筆數少那是還好, 但資料筆數多,或比對字串的陣列一多 不知大家會怎樣做比對... 目前是看了一些,有用split分割資料放在String[]中, 或用StringTokenizer方法切割資料,最後跑雙迴圈或三迴圈比對, 後來就在找一些包含或比對的東西, 發現在Set中的containsAll方法可以做Set比對,其code如下: import java.util.*; public class Test3 { public static void main(String args[]){ // 比對的內容 String[] sArray = {"2 10", "5 8 19", "3 7 10 13"}; // 宣告要比對的Map及計數器的Map Map<String,Set<String>> checkMap = new HashMap<String,Set<String>>(); Map<String,Integer> countMap = new HashMap<String,Integer>(); // 先把比對的陣列轉成map, for(String str: sArray){ Set<String> checkSet = new HashSet<String>(); checkSet.addAll(Arrays.asList(str.split(" "))); checkMap.put(str, checkSet); countMap.put(str, 0); } // 要比對的資料 String input = "2 5 7 8 10 15 19"; // 把資料轉成Set Set<String> inputSet = new HashSet<String>(); inputSet.addAll(Arrays.asList(input.split(" "))); // 資料比對 for(String key:checkMap.keySet()){ if(inputSet.containsAll(checkMap.get(key))) countMap.put(key, countMap.get(key)+1); } // 印出countMap筆數 for(String key: countMap.keySet()) System.out.println("item=" + key + ", Count=" + countMap.get(key)); } } output的結果如下: item=2 10, Count=1 item=5 8 19, Count=1 item=3 7 10 13, Count=0 input的資料可能透過讀檔的方式 那筆數可能萬、十萬、百萬、千萬…都有可能 所以,我只想討論一下~大家覺得怎樣比對較有效率^^ 還是有其他比較好的建議… 感謝各位!! Best regards, --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.130.36.90
1F:→ tkcn:input 都會是數字嗎? 12/04 23:03
2F:→ tkcn:input 那裡我有看沒有懂 12/04 23:04
3F:→ ken915007:我只是用數字測試~會是中文詞...或英文單字~等等的 12/04 23:06
4F:→ ken915007:我是想用text mining上,會是non-structural資料... 12/04 23:09
5F:推 snowlike:所以該例要得到2?感覺上是n-gram,可以搜尋相關演算法 12/04 23:22
我剛剛去search了n-gram方法…不是這個… 我主要的是玩關聯規則…像aprior等等的,裡面就會有data跟n-itemset的比較 但我主要不是在方法的部分…因為方法我有找到相關方法的code針對structural資料 也看過code了,但我要把方法改成對non-structural的資料 ※ 編輯: ken915007 來自: 140.130.36.90 (12/04 23:40)
6F:推 slalala:好酷 Map<String,Set<String>> 12/05 02:01
7F:推 qrtt1:看能不能在資料前處理時統一成數字, 要結果再轉成字串 12/05 08:20
8F:→ ken915007:若item要是多的話…這樣轉數字~最後在反轉~也是要時間 12/05 12:12
9F:→ ken915007:酷!! 難道不能這樣用?還是比較不好?? 12/05 12:14
10F:→ qrtt1:處理簡單的型別絕對比物件來的有效率 12/05 13:41
11F:→ qrtt1:關聯用 fp-tree 比較有效率的說 :P 12/05 13:43
嗯! 我有看過這些方法~但精準度apriori會比較高點...所以才想用apriori, 但缺點就是要重覆掃資料... 有點離題了^^ 重點不是這演算法= = 我想知道對於字串的比對~像上面的範例~大家會用什麼方法去比對是否有出現過 ※ 編輯: ken915007 來自: 140.130.36.90 (12/05 14:33)
12F:推 KanoLoa:先排序再說 ? 12/05 15:33
13F:→ ken915007:先排序在說???~那我不用HashSet改用SortedSet? 12/05 17:04
14F:推 MephistoH:阿咧...不是都用正則表示嗎 = = ?? 12/05 19:44
15F:→ ken915007:正則表示!!能用於中文類型? 我還試過 12/05 20:10
16F:→ jej:一個很笨的方法..如果都是String的話..可以試看看轉成byte[] 12/05 23:38
17F:→ jej:然後用apache common作byte[]比較..唯一的就放到array裡面 12/05 23:40







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:WOW站內搜尋

TOP