亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫
123456
最近訪問板塊 發(fā)新帖
樓主: crazyhadoop
打印 上一主題 下一主題

互聯(lián)網(wǎng)文本處理挑戰(zhàn)巨大 中文分詞系統(tǒng)設(shè)計(jì)如何面對? [復(fù)制鏈接]

論壇徽章:
1
天蝎座
日期:2013-12-06 18:23:58
51 [報(bào)告]
發(fā)表于 2012-06-05 09:31 |只看該作者
回復(fù) 52# to407


    那你可以去告某狗了,哈哈

論壇徽章:
2
午馬
日期:2015-01-27 11:22:392015年辭舊歲徽章
日期:2015-03-03 16:54:15
52 [報(bào)告]
發(fā)表于 2012-06-05 09:37 |只看該作者
回復(fù) 53# crazyhadoop


    像google拼音和搜狗拼音的例子,北郵方那啥 曾經(jīng)作過精辟的論斷, 然后 他被砸了。

論壇徽章:
1
天蝎座
日期:2013-12-06 18:23:58
53 [報(bào)告]
發(fā)表于 2012-06-10 20:04 |只看該作者
想想現(xiàn)在的形式,精準(zhǔn)分詞很重要啊

論壇徽章:
0
54 [報(bào)告]
發(fā)表于 2012-06-16 11:42 |只看該作者
本帖最后由 huihui_2012 于 2012-06-16 12:27 編輯

基于成詞概率的中文分詞算法(WRSeg)解碼算法


由于切分路徑有2^(n-1)種,要從里面選一條最優(yōu)路徑,一一列舉是不行的。本文采取維特比規(guī)劃(即動(dòng)態(tài)規(guī)劃)的方法來實(shí)現(xiàn)。
為了進(jìn)一步提高效率,因?yàn)殚L度很長的詞語很少,因此,通常對詞語的長度設(shè)定一個(gè)上限。就是認(rèn)為如果長度超過這個(gè)上限,其成詞概率都設(shè)為0。在本文所述的系統(tǒng)中,最大長度M設(shè)為8。
下面我們講述在用二元語法的WR值來估計(jì)切分概率的解碼過程。為了使用動(dòng)態(tài)規(guī)劃,我們需要記錄截止到每個(gè)位置上已有的最優(yōu)切分路徑。在每個(gè)位置上,我們要保存截止到該位置的字串的最多M(注:M是我們設(shè)定的最大詞語長度)條可能的最優(yōu)路徑,分別是:最后一個(gè)詞語長度是1,2,3,…,M的最優(yōu)路徑。
對每個(gè)位置可能的M條路徑,要分別計(jì)算。假設(shè)當(dāng)前位置為i上最后一個(gè)詞語長度為j的最優(yōu)切分路徑的切分概率為P[j]。P[j]的遞推計(jì)算過程如下:

其中M是設(shè)定的最大長度; 是待分詞的句子中從位置(i-j)到i之間的字符組成的字串,長度為j; 則是從位置(i-j-k)到(i-j)之間的字串,長度為k。
這樣,我們就可以從左到右遞推地求得每個(gè)位置上的若干條最優(yōu)路徑。我們從最后位置上的若干最優(yōu)切分路徑中選出一條最優(yōu)路徑作為分詞結(jié)果輸出。
以“它是一條黃狗”為例。首先看第0個(gè)位置,截止到該位置,只有一個(gè)字“它”,因此只有1條最優(yōu)切分路徑,該切分路徑的最后一個(gè)詞語就是“它”,長度為1。該切分路徑的切分概率P[0][1]是Pr(“它”|<s>)
然后,我們逐字向右掃描。看第1個(gè)位置,截止到該位置的字串是“它是”。我們需要分別獲得兩條最優(yōu)路徑,
一條是最后一個(gè)詞語長度為1,即最后一個(gè)詞是“是”的最優(yōu)切分路徑;該路徑是“它/是”,其切分概率 P[1][1]=P[0][1]*WR(是|它).
另一條是最后一個(gè)詞語的長度為2,即最后一個(gè)詞語是“它是”的最優(yōu)切分路徑,該路徑是“它是”,切分概率是 P[1][2]=WR(它是|<s>)。
再往后看一個(gè)位置,此時(shí)字串是“它是一”,我們需要在該路徑上保存三條不同最優(yōu)路徑,三條路徑的概率分別是P[2][1],P[2][2],P[2][3]。
其計(jì)算方式分別如下:
(1) P[2][1]=max{P[1][1]*WR(一|是),P[1][2]*WR(一|它是)}
在上式中,假設(shè)P[1][1]*WR(一|是) >P[1][2]*WR(一|是) ,則P[2][1]=P[1][1]*WR(一|是),則P[2][1]所對應(yīng)的切分路徑是“它是/一”。
(2) P[2][2]=P[0][1]*WR(是一|它)
該切分路徑是“它/是一”。
(3) P[2][3]=WR(它是一|<s>)
對應(yīng)的切分路徑是“它是一”。
我們依次類推后續(xù)各個(gè)位置的最優(yōu)切分路徑和對應(yīng)的切分概率。
該解碼算法的具體實(shí)現(xiàn)參見后文提到的java工程中的BigramSeg類的segment(String sentence)方法。注意:在實(shí)際的計(jì)算中,為了避免向下溢出和提高效率,通過對WR取對數(shù),在求切分概率時(shí),將各個(gè)WR值的連乘運(yùn)算變成了對數(shù)值的相加運(yùn)算。

論壇徽章:
0
55 [報(bào)告]
發(fā)表于 2012-06-16 12:04 |只看該作者
本帖最后由 huihui_2012 于 2012-06-16 13:19 編輯

WRSeg分詞器的java工程模塊
本文所實(shí)現(xiàn)的WRSeg分詞器以java語言開發(fā)。主要步驟在ChineseSegment這個(gè)工程中實(shí)現(xiàn)。這個(gè)工程引用了Tools工程中的一些工具類。因此,在使用時(shí),要將Tools導(dǎo)入到ChineseSegment中。源代碼見附件。源代碼內(nèi)有已經(jīng)訓(xùn)練好的分詞器,用戶可以直接使用。因?yàn)槭芨郊笮〉南拗疲嫉挠?xùn)練語料沒有在源代碼包中(訓(xùn)練語料用的是北大標(biāo)注的1998年1月的語料)。

源代碼僅供學(xué)術(shù)參考使用,若用于商業(yè)用途,請聯(lián)系我:zhonghui830506@163.com

ChineseSegment項(xiàng)目的目錄結(jié)構(gòu)如下:

其中Count類是用來統(tǒng)計(jì)詞頻,進(jìn)而計(jì)算成詞概率的類;CountBiGram繼承Count,專門對二元語法概率進(jìn)行計(jì)算。
MergeNameEntity類是用于解決人名、地名、機(jī)構(gòu)名等的詞語粒度問題。在原始語料中,人名中姓和名字被當(dāng)作是兩個(gè)詞語。如“江 澤民”中姓氏“江”和名字“澤民”被當(dāng)作兩個(gè)詞語。但是,這往往不符合實(shí)際需求。在實(shí)際需求中,我們通常不希望將名字分割。在地名、機(jī)構(gòu)名中也會(huì)存在類似的情況。MergeNameEntity類中提供方法將人名、地名、機(jī)構(gòu)名中的各個(gè)組成部分合成一個(gè)單一的詞語。
統(tǒng)計(jì)的成詞概率結(jié)果放在數(shù)據(jù)結(jié)構(gòu)類SegModel類的對象中。
UnigramSeg是利用Unigram語法,利用動(dòng)態(tài)規(guī)劃進(jìn)行分詞的類。BigramSeg是利用二元語法進(jìn)行分詞的類。
199801q.txt是原始訓(xùn)練語料,語料中的人名、地名和機(jī)構(gòu)名都沒有采取MergeNameEntity類中所提供的合并策略。詞典.txt是前面所提到的外部詞典,里面的詞語不是來自于199801q.txt。
biWordRate.out,wordFrequence.out,wordRate.out都是已經(jīng)訓(xùn)練好的分詞模型。這些模型中都已經(jīng)對人名中的姓氏和名字進(jìn)行了合并,但是沒有對地名和機(jī)構(gòu)名進(jìn)行MergeNameEntity類中所提供的合并。wordFrequence.out是基于wordfreq的一元語法,wordRate.out是基于wordrate的一元語法。biWordRate.out是基于二元語法,分詞效果最好。
SplitSentence_seg是基于分詞開發(fā)的一些工具方法,可以忽略。

調(diào)用示例
調(diào)用方法。下面的例子展示了如何調(diào)用本文所述的工程:
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;

import org.tseg.seg.SegModel;
import org.tseg.seg.BigramSeg;

public class ChineseSegment {
       
       
//假如原句是:
//        鄧玉嬌是湖北人,在09年是熱點(diǎn)新聞人物
//        則分詞后的結(jié)果是(返回結(jié)果的詞語之間用空格隔開):
//        鄧玉嬌 是 湖北 人 , 在 09年 是 熱點(diǎn) 新聞 人物
        public String seg(String line){
                //用單例方法來獲得分詞器,這樣為了避免分詞器的重復(fù)加載
                BigramSeg seg = BigramSeg.getSeg();
                return seg.segment(line);
        }
       
        //假如原句是:
//        鄧玉嬌是湖北人,在09年是熱點(diǎn)新聞人物
//        則分詞后的結(jié)果是(返回結(jié)果放在一個(gè)ArrayList中):
//        [鄧玉嬌, 是, 湖北, 人, ,, 在, 09年, 是, 熱點(diǎn), 新聞, 人物]
        public ArrayList<String> getSegList(String line){
                //用單例方法來獲得分詞器,這樣為了避免分詞器的重復(fù)加載
                BigramSeg seg = BigramSeg.getSeg();
                return seg.getSegWordList(line);
        }
       
//        給分詞器加入新詞
        public BigramSeg seggerWithNewWords(Collection<String> newWords){
                 //沒有用取得單例的方法來獲得分詞器,這是為了不讓新生成的分詞器影響別的應(yīng)用
                BigramSeg seg = new BigramSeg(SegModel.biWordRateType);
                for(String word : newWords){
                        if(!seg.getModel().wordLogProb.containsKey(word)){
                                seg.getModel().wordLogProb.put(word, 0.0);
                        }
                }
               
                return seg;
        }
       
        //將加入了新詞的新的分詞器保存到文件中
        public void save(BigramSeg seg, String segPath) throws IOException{
                seg.getModel().writeModel(segPath);
        }
       
        //從文件中讀取分詞器
        public BigramSeg read(String segPath) throws IOException{
                return new BigramSeg(segPath);
        }
       
        public void segTest() throws IOException{
                String line = "鄧玉嬌是湖北人,在09年是熱點(diǎn)新聞人物";
               
                System.out.println(this.seg(line));
                System.out.println(this.getSegList(line));
               
                line = "鄧玉嬌刺官案在社會(huì)上反響很大!";
                System.out.println(this.getSegList(line));
//                輸出結(jié)果:[鄧玉嬌, 刺, 官案, 在, 社會(huì), 上, 反響, 很, 大, !]
                 
                Set<String> newWords = new HashSet<String>();
                newWords.add("刺官案");
                BigramSeg seg = this.seggerWithNewWords(newWords); //往分詞器里加入新詞,生成一個(gè)新的分詞器
                System.out.println(seg.getSegWordList(line));
//                輸出結(jié)果:[鄧玉嬌, 刺官案, 在, 社會(huì), 上, 反響, 很, 大, !]
               
                String segPath = "D:/xing/seg.out";
                this.save(seg, segPath); //保存新分詞器
                BigramSeg newSeg = this.read(segPath);  //讀取剛保存的新分詞器
                System.out.println(newSeg.getSegWordList(line));
//                輸出結(jié)果:[鄧玉嬌, 刺官案, 在, 社會(huì), 上, 反響, 很, 大, !]
               
        }
       
        public static void main(String args[]) throws IOException{
                ChineseSegment cst = new ChineseSegment();
                cst.segTest();
               
        }
       
       
}

Tools.rar

542.71 KB, 下載次數(shù): 19

ChineseSegment.rar

4.7 MB, 下載次數(shù): 30

您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP