Created
May 9, 2020 12:25
-
-
Save mooz/4d2da88c74daf09c289f9e00f015040e to your computer and use it in GitHub Desktop.
TinySegmenter
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(function (global) { | |
global.TinySegmenter = TinySegmenter; | |
var default_model = {BC1:{IH:-2384,II:3270,IK:-100,NH:2173,OH:-1008,OO:1343},BC2:{AA:-12150,HH:-4329,HI:-978,IH:1459,II:-6625,IO:4584,KI:1578,KK:-11956,KM:-2208,NH:1157,NN:-9390,OH:1131,OI:320,OO:-11227},BC3:{HH:906,IO:614,KK:170},BIAS:2252,BP1:{BB:302,OB:-231,OO:146,UB:282},BP2:{OB:1327,UB:49,UU:-146},BQ1:{BII:-100,OII:252},BQ2:{BHH:434,BHI:455,BIH:-1446,OHH:-802,OKK:-1977,UII:-661},BQ3:{BHH:-148,BHI:139,BIH:58,OHH:1008,UOH:-1190},BQ4:{BAA:-1264,BHH:-2820,BII:-3700,BOO:-353,OHI:-1024,OIH:-893,UHH:-712},BW1:{'、と':49,'いる':462,'うし':-2206,'から':1819,'こと':2372,'した':315,'して':1779,'しょ':1428,'そこ':1096,'そし':-1226,'たち':1283,'った':2355,'つい':-384,'てい':1550,'てき':250,'てく':-346,'てし':-784,'でも':589,'どこ':1229,'ない':6901,'なっ':505,'にし':1693,'ませ':1564,'まる':-3912,'よう':2051,'よっ':-317,'をし':457,'同時':-3330,'本当':-3421},BW2:{'——':-12400,'──':-6300,'いう':-4120,'いた':955,'いは':-3214,'から':-3546,'こと':-8616,'この':-4459,'させ':759,'され':9917,'しい':-642,'した':2787,'その':-5916,'たち':-3820,'った':1591,'っと':-4079,'てい':7284,'てく':98,'ては':-2186,'ても':-567,'であ':1657,'でい':1374,'でき':-48,'でし':-2471,'です':-3900,'とい':4250,'とこ':-865,'ない':-1798,'にお':-1010,'にし':2847,'にな':99,'によ':-4340,'に対':-9967,'に関':-6166,'のか':146,'のに':-1710,'まし':-508,'まで':-3022,'まれ':2249,'もの':-13605,'れた':399,'れば':3115,'ろう':3694,'われ':398,'を通':-7766,'んだ':730,'んな':-4906,'ネロ':1184,'時に':-480},BW3:{'ある':1331,'いい':3101,'いっ':1643,'いる':3480,'う。':705,'うと':3187,'うに':-298,'かっ':-2286,'から':5058,'がら':-2272,'きた':249,'こと':8301,'この':1826,'ころ':-1355,'しい':-1677,'して':153,'しま':355,'す。':-5317,'する':3975,'その':1365,'た。':6490,'たい':-2823,'たの':252,'った':-2120,'てい':6251,'てく':99,'ての':-403,'です':952,'とい':671,'とも':-402,'ない':3314,'に、':-1220,'には':1946,'のも':-929,'の子':-1619,'まし':1875,'ます':4331,'まで':1733,'もの':3095,'られ':5894,'れた':49,'れて':936,'れば':-1671,'われ':-1412,th:148},TC1:{HII:395,IHI:205,III:665,KKK:635,OII:-318},TC2:{AAA:-159,HHH:-293,IHI:-710,IIH:-161,III:-2058,KKI:1771,OII:-3714},TC3:{HHI:-62,HIH:-201,HII:-1059,IHH:1154,IHI:-1153,IIH:-2697,IIK:-395,IKK:1530},TC4:{AAA:3209,HHI:1144,HIH:558,HII:-340,HIO:-102,IIH:-525,III:1057,IIO:56,IOO:311,KKK:1907},TQ1:{BHII:-57,BIII:607,OHII:838},TQ2:{BIIH:-621,BOHI:-105,OKHH:-48},TQ3:{BHIH:63,BHII:-160,BIHI:245,OAAA:1641,OHHI:842,OHII:1610,OIII:-55,OIKK:-333,OKKK:626,OOHI:-338,OOII:-979},TQ4:{BHHH:-1955,BHIH:723,BIII:-1987,OHIH:-6132,OHII:73,OIHI:-2427,OIII:-1146},TW1:{'につい':-1161,'によっ':-48},TW2:{'しょう':1174,'そして':-1058,'として':-1014,'まるで':-48,'よって':-610,'ラグイ':49},TW3:{'として':-861,'につい':-449,'にとっ':-1982,'ので、':-1324},TW4:{'いうこ':1351,'した。':-1282,'してい':1032,'ている':569,'という':355,'ました':4971,'ません':3006,'ようと':-2566,'ように':831},UC1:{A:102,I:-85,O:-686},UC2:{H:3493,I:-156,K:897,M:2732,O:-816},UC3:{I:837,M:-4795,O:10912},UC4:{H:664,I:328,M:-1563,O:7853},UC5:{H:1360,I:-789},UC6:{A:340,H:-155,I:445,O:862},UP1:{B:92,O:403,U:-451},UP2:{O:-211},UP3:{O:540},UQ1:{BK:390,OH:-96,OI:157,OK:-107,UI:-535},UQ2:{OH:-1085,OK:594},UQ3:{BH:-2469,BI:3942,BK:-57,BO:561},UW1:{'、':-277,'が':-686,'こ':585,'し':-105,'っ':105,'と':-191,'に':-1346,'の':-55,'は':-1508,'も':-415,'や':-98,'よ':948,'る':578,'を':-647,'ー':162,B1:181,i:49},UW2:{'、':-558,'。':-316,'」':1067,'い':100,'う':-137,'お':-98,'か':1811,'が':-1128,'く':-638,'こ':2216,'さ':400,'し':1372,'す':-260,'そ':-595,'た':209,'だ':1161,'っ':507,'て':-763,'と':-1617,'な':177,'に':-1957,'の':53,'は':-1657,'ま':157,'も':-852,'よ':787,'り':-421,'る':-1385,'れ':362,'を':-2556,'ん':2137,'不':-1603,'大':-3151,'小':-1297,'見':-2653},UW3:{'、':6254,'あ':-4503,'う':2797,'え':1407,'お':-5353,'か':-1596,'が':3324,'く':1164,'こ':-4431,'ご':-1948,'さ':-1320,'し':-556,'せ':3286,'そ':-5733,'た':63,'ち':-309,'っ':-96,'つ':-768,'て':6469,'で':563,'と':1292,'ど':-1158,'な':-3544,'に':1789,'の':3496,'は':5820,'ほ':-3055,'ま':-5490,'み':-101,'も':1444,'よ':-1197,'り':841,'る':5418,'れ':2871,'わ':-1525,'を':7656,'グ':408,'ニ':-246,'ネ':3481,'ル':99,'ン':794,'二':4131,'人':1803,'何':4115,'大':98,'当':-3288,'彼':637,'数':1064,'的':7837,'私':4337,'立':-618,'第':98,'見':98,d:1243,e:702,i:-2894,s:793,y:299},UW4:{'、':1653,'あ':6035,'い':-3377,'う':-1003,'え':-4600,'お':818,'か':428,'が':6472,'き':-4125,'く':-3903,'け':-4373,'こ':1197,'さ':947,'し':-740,'じ':-780,'そ':4140,'た':5005,'だ':5176,'ち':-3275,'っ':-6387,'つ':-2120,'て':3190,'で':7549,'と':3978,'な':5348,'に':6219,'の':8590,'は':9538,'ば':180,'び':-938,'へ':3780,'ほ':1481,'ま':2351,'め':-4288,'も':1870,'ゃ':-1888,'や':1878,'ょ':-2697,'よ':2577,'ら':-4078,'り':-8857,'る':-11569,'れ':-1577,'ろ':-3354,'わ':-75,'を':17597,'ん':-257,'ソ':1737,'ッ':-835,'ド':1016,'ニ':-1362,'ラ':148,'ル':-145,'ン':-1043,'ー':-5308,'人':2294,'子':-408,'対':-1833,'的':2740,'者':249,e:-2623,n:-703,r:-516},UW5:{'、':-407,'。':764,'あ':689,'い':160,'か':768,'が':-331,'き':1863,'さ':-1524,'し':-186,'た':158,'ち':1347,'つ':266,'て':-465,'で':-302,'と':1191,'な':-598,'に':-1416,'も':-424,'ゃ':1741,'り':-49,'る':1002,'れ':963,'を':-609,'ン':1702,'ー':857,'度':-611,'的':-3183,a:102,h:1134,o:1386,t:-618},UW6:{'、':-561,'あ':-100,'い':49,'か':108,'た':-50,'だ':51,'っ':148,'て':-2204,'と':-832,'の':-368,'は':-456,'も':-102,'れ':-51}}; | |
function TinySegmenter(model) { | |
this.model = model || default_model; | |
} | |
var patterns = { | |
"[一二三四五六七八九十百千万億兆]":"M", | |
"[一-龠々〆ヵヶ]":"H", | |
"[ぁ-ん]":"I", | |
"[ァ-ヴーア-ン゙ー]":"K", | |
"[a-zA-Za-zA-Z]":"A", | |
"[0-90-9]":"N" | |
}; | |
var chartype = []; | |
for (var i in patterns) { | |
var regexp = new RegExp; | |
regexp.compile(i); | |
chartype.push([regexp, patterns[i]]); | |
} | |
function getctype(str) { | |
for (var i in chartype) { | |
if (str.match(chartype[i][0])) { | |
return chartype[i][1]; | |
} | |
} | |
return "O"; | |
} | |
TinySegmenter.prototype.segment = function(input) { | |
if (input == null || input == undefined || input == "") { | |
return []; | |
} | |
var m = this.model; | |
var result = []; | |
var seg = ["B3","B2","B1"]; | |
var ctype = ["O","O","O"]; | |
var o = input.split(""); | |
for (i = 0; i < o.length; ++i) { | |
seg.push(o[i]); | |
ctype.push(getctype(o[i])); | |
} | |
seg.push("E1"); | |
seg.push("E2"); | |
seg.push("E3"); | |
ctype.push("O"); | |
ctype.push("O"); | |
ctype.push("O"); | |
var word = seg[3]; | |
var p1 = "U"; | |
var p2 = "U"; | |
var p3 = "U"; | |
for (var i = 4; i < seg.length - 3; ++i) { | |
var score = m.BIAS; | |
var w1 = seg[i-3]; | |
var w2 = seg[i-2]; | |
var w3 = seg[i-1]; | |
var w4 = seg[i]; | |
var w5 = seg[i+1]; | |
var w6 = seg[i+2]; | |
var c1 = ctype[i-3]; | |
var c2 = ctype[i-2]; | |
var c3 = ctype[i-1]; | |
var c4 = ctype[i]; | |
var c5 = ctype[i+1]; | |
var c6 = ctype[i+2]; | |
score += m.UP1[p1]||0; | |
score += m.UP2[p2]||0; | |
score += m.UP3[p3]||0; | |
score += m.BP1[p1 + p2]||0; | |
score += m.BP2[p2 + p3]||0; | |
score += m.UW1[w1]||0; | |
score += m.UW2[w2]||0; | |
score += m.UW3[w3]||0; | |
score += m.UW4[w4]||0; | |
score += m.UW5[w5]||0; | |
score += m.UW6[w6]||0; | |
score += m.BW1[w2 + w3]||0; | |
score += m.BW2[w3 + w4]||0; | |
score += m.BW3[w4 + w5]||0; | |
score += m.TW1[w1 + w2 + w3]||0; | |
score += m.TW2[w2 + w3 + w4]||0; | |
score += m.TW3[w3 + w4 + w5]||0; | |
score += m.TW4[w4 + w5 + w6]||0; | |
score += m.UC1[c1]||0; | |
score += m.UC2[c2]||0; | |
score += m.UC3[c3]||0; | |
score += m.UC4[c4]||0; | |
score += m.UC5[c5]||0; | |
score += m.UC6[c6]||0; | |
score += m.BC1[c2 + c3]||0; | |
score += m.BC2[c3 + c4]||0; | |
score += m.BC3[c4 + c5]||0; | |
score += m.TC1[c1 + c2 + c3]||0; | |
score += m.TC2[c2 + c3 + c4]||0; | |
score += m.TC3[c3 + c4 + c5]||0; | |
score += m.TC4[c4 + c5 + c6]||0; | |
score += m.UQ1[p1 + c1]||0; | |
score += m.UQ2[p2 + c2]||0; | |
score += m.UQ3[p3 + c3]||0; | |
score += m.BQ1[p2 + c2 + c3]||0; | |
score += m.BQ2[p2 + c3 + c4]||0; | |
score += m.BQ3[p3 + c2 + c3]||0; | |
score += m.BQ4[p3 + c3 + c4]||0; | |
score += m.TQ1[p2 + c1 + c2 + c3]||0; | |
score += m.TQ2[p2 + c2 + c3 + c4]||0; | |
score += m.TQ3[p3 + c1 + c2 + c3]||0; | |
score += m.TQ4[p3 + c2 + c3 + c4]||0; | |
var p = "O"; | |
if (score > 0) { | |
result.push(word); | |
word = ""; | |
p = "B"; | |
} | |
p1 = p2; | |
p2 = p3; | |
p3 = p; | |
word += seg[i]; | |
} | |
result.push(word); | |
return result; | |
}; | |
})(this); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment