0
我已經在Javascript中構建了一個ngram模型實現,它工作正常。不過,我期待改變我的數據結構,以便每次觀察到新的單詞/字符時都不必遍歷所有歷史記錄。ngrams的數據結構
在這裏,我採取seedtext,並用它來與一個以建立的n-gram 2.
var ngrams = {};
var order = 2;
var seedtext = "adadwsdawdsadawdsadadasdwdadaaasdsadsdadwdasdasd";
build();
function build(){
for (var i = 0; i < seedtext.length - order; i++) {
var gram = seedtext.substring(i, i + order);
var next = seedtext.charAt(i + order);
if (!ngrams.hasOwnProperty(gram)) {
ngrams[gram] = [];
}
ngrams[gram].push(next);
}
}
console.log(ngrams);
console.log(ngrams["wd"]);
我期待有保存每個觀測模式的一個記錄的數據結構(對於給定的訂單,每個觀察到的模式應該有一個下一個可能的觀測及其計數
例如,如果您運行下面的代碼,輸出suc H作爲此可以看出:
[object Object] {
aa: ["a", "s"],
ad: ["a", "w", "a", "a", "a", "a", "s", "w"],
as: ["d", "d", "d", "d"],
aw: ["d", "d"],
da: ["d", "w", "w", "d", "s", "d", "a", "d", "s", "s"],
ds: ["a", "a", "a", "d"],
dw: ["s", "d", "d"],
sa: ["d", "d", "d"],
sd: ["a", "w", "s", "a", "a"],
wd: ["s", "s", "a", "a"],
ws: ["d"]
}
["s", "s", "a", "a"]
現在,如果我們把「廣告」,例如:ngrams["ad"]
,我們回來["a", "w", "a", "a", "a", "a", "s", "w"]
。
顯然,在ad
之後,我們可以得到w
,a
或s
。
我想組字母,這樣ngrams["ad"]
回報是這樣的:
{a: 5
w: 2
s :1}
注意,他們是爲了使最頻繁出現的字母是在頂部,其計數。
我希望能夠訪問數據,像這樣(例如):
ngrams["ad"].a;
ngrams["ad"].w;
ngrams["ad"].s;
,並取回5
爲a
,2 w
和1 s
。
我也希望能夠增加值,因爲先前看到的模式再次被觀察到......我也希望能夠刪除模式。
任何想法?
輝煌。謝謝! – pookie