Nodejs做文本數(shù)據(jù)處理實現(xiàn)詳解
nodejieba 簡介
隨著漢語言的廣泛應(yīng)用,中文信息處理成了一個重要的研究課題,常見于搜索引擎:信息檢索、中外文自動翻譯、數(shù)據(jù)挖掘技術(shù)、自然語言處理等領(lǐng)域。在處理的過程中,中文分詞是最基礎(chǔ)的一環(huán)。
nodeJieba
是結(jié)巴中文分詞的 Node.js 版本實現(xiàn), 由 CppJieba
提供底層分詞算法實現(xiàn),是兼具高性能和易用性兩者的 Node.js 中文分詞插件。
nodejieba模塊支持以下3種分詞模式:
(1) 精確模式,試圖將句子最精準(zhǔn)地切開。
(2) 全模式,將句子中所有可以成詞的詞語都掃描出來,速度非常快。
(3) 搜索引擎模式,在精確模式的基礎(chǔ)上對長詞再次切分。
特點
- 詞典載入方式靈活,無需配置詞典路徑也可使用,需要定制自己的詞典路徑時也可靈活定制。
- 底層算法實現(xiàn)是C++,性能高效。
- 支持多種分詞算法。
- 支持動態(tài)補充詞庫。
常用API
noedejieba模塊中提供了一系列函數(shù),常用的有cut()函數(shù)、cutAll()函數(shù)、cutForSearch()函數(shù)、tag()函數(shù)、extract()函數(shù)。
1.cut()函數(shù)
用來做精確模式下的內(nèi)容分詞,僅有1個參數(shù)sentence,表示需要分詞性的內(nèi)容字符串格式。
2.cutAll()函數(shù)
用來做全模式下的內(nèi)容分詞,僅有1個參數(shù)sentence,表示需要分詞性的內(nèi)容字符串格式。
3.cutForSearch()函數(shù)
用來做搜索引擎模式下的內(nèi)容分詞,僅有1個參數(shù)sentence,表示需要分詞性的內(nèi)容字符串格式。
4.tag()函數(shù)
用來做詞性標(biāo)注,即根據(jù)詞性來做分詞分類,僅有1個參數(shù)sentence,表示需要分詞性的內(nèi)容字符串格式。
5.extract()函數(shù)
用來做關(guān)鍵詞抽取,有如下2個參數(shù):
- 第一個參數(shù)為sentence,表示需要分詞的內(nèi)容字符串格式。
- 第二個參數(shù)為topN,表示只保留出現(xiàn)頻率為前 N 的詞。
基本使用
- 安裝依賴
npm install nodejieba --save
- 詞典載入可靈活配置
如果需要載入自己的詞典,而不是默認詞典。 比如想要載入自己的用戶詞典,則使用以下函數(shù):
nodejieba.load({ userDict: './test/testdata/userdict.utf8', });
字典載入函數(shù)load的參數(shù)項都是可選的, 如果沒有對應(yīng)的項則自動填充默認參數(shù)。 所以上面這段代碼和下面這代代碼是等價的。
nodejieba.load({ dict: nodejieba.DEFAULT_DICT, hmmDict: nodejieba.DEFAULT_HMM_DICT, userDict: './test/testdata/userdict.utf8', idfDict: nodejieba.DEFAULT_IDF_DICT, stopWordDict: nodejieba.DEFAULT_STOP_WORD_DICT, });
詞典說明
- dict: 主詞典,帶權(quán)重和詞性標(biāo)簽,建議使用默認詞典。
- hmmDict: 隱式馬爾科夫模型,建議使用默認詞典。
- userDict: 用戶詞典,建議自己根據(jù)需要定制。
- idfDict: 關(guān)鍵詞抽取所需的idf信息。
- stopWordDict: 關(guān)鍵詞抽取所需的停用詞列表。
注意:如果沒有主動調(diào)用詞典函數(shù)時, 則會在第一次調(diào)用cut等功能函數(shù)時,自動載入默認詞典。且詞典只會被加載一次。
1.分詞用法
var nodejieba = require("nodejieba"); var result = nodejieba.cut("南京市長江大橋");// 精確模式 console.log(result); //["南京市","長江大橋"] var nodejieba = require("nodejieba"); var result = nodejieba.cutAll("南京市長江大橋");// 全模式 console.log(result); // [ // '南京', '南京市', // '京市', '市長', // '長江', '長江大橋', // '大橋' // ] var nodejieba = require("nodejieba"); var result = nodejieba.cutForSearch("南京市長江大橋");// 搜索引擎模式 console.log(result); // [ '南京', '京市', '南京市', '長江', '大橋', '長江大橋' ]
2.詞性標(biāo)注
var nodejieba = require("nodejieba"); console.log(nodejieba.tag("紅掌撥清波")); //[ { word: '紅掌', tag: 'n' }, // { word: '撥', tag: 'v' }, // { word: '清波', tag: 'n' } ]
3.關(guān)鍵詞抽取
var nodejieba = require("nodejieba"); var topN = 4; console.log(nodejieba.extract("升職加薪,當(dāng)上CEO,走上人生巔峰。", topN)); //[ { word: 'CEO', weight: 11.739204307083542 }, // { word: '升職', weight: 10.8561552143 }, // { word: '加薪', weight: 10.642581114 }, // { word: '巔峰', weight: 9.49395840471 } ] // textRankExtract API好像目前已棄用了 console.log(nodejieba.textRankExtract("升職加薪,當(dāng)上CEO,走上人生巔峰。", topN)); //[ { word: '當(dāng)上', weight: 1 }, // { word: '不用', weight: 0.9898479330698993 }, // { word: '多久', weight: 0.9851260595435759 }, // { word: '加薪', weight: 0.9830464899847804 }, // { word: '升職', weight: 0.9802777682279076 } ]
4.其他用法
var nodejieba = require('nodejieba'); var sentence = "我是拖拉機學(xué)院手扶拖拉機專業(yè)的。不用多久,我就會升職加薪,當(dāng)上CEO,走上人生巔峰。"; var result; // 沒有主動調(diào)用nodejieba.load載入詞典的時候, // 會在第一次調(diào)用cut或者其他需要詞典的函數(shù)時,自動載入默認詞典。 // 詞典只會被加載一次。 // 精確模式 result = nodejieba.cut(sentence); console.log(result); // 隱馬爾可夫模型 result = nodejieba.cutHMM(sentence); console.log(result); // 全模式 result = nodejieba.cutAll(sentence); console.log(result); // 搜索引擎模式 result = nodejieba.cutForSearch(sentence); console.log(result); // 詞性標(biāo)注:根據(jù)詞性來分 result = nodejieba.tag(sentence); console.log(result); var topN = 5; // 關(guān)鍵詞抽取,topN表示取前N個 result = nodejieba.extract(sentence, topN); console.log(result); result = nodejieba.cut("男默女淚");// 精確模式下分成四個字 console.log(result); // 將該詞匯插入詞庫 nodejieba.insertWord("男默女淚"); result = nodejieba.cut("男默女淚");// 在詞庫中已有的情況下,不細分了 console.log(result); // 設(shè)定分詞后的單個元素最大長度 result = nodejieba.cutSmall("南京市長江大橋", 3); console.log(result);
以上就是Nodejs做文本數(shù)據(jù)處理實現(xiàn)詳解的詳細內(nèi)容,更多關(guān)于Nodejs文本數(shù)據(jù)處理的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Node.js中使用mongoskin操作mongoDB實例
這篇文章主要介紹了Node.js中使用mongoskin操作mongoDB實例,Mongous是一個輕量級的nodejs mongodb驅(qū)動,需要的朋友可以參考下2014-09-09NodeJS父進程與子進程資源共享原理與實現(xiàn)方法
這篇文章主要介紹了NodeJS父進程與子進程資源共享原理與實現(xiàn)方法,結(jié)合實例形式分析了nodejs基于cluster模塊實現(xiàn)父進程與子進程資源共享的相關(guān)操作技巧,需要的朋友可以參考下2018-03-03NodeJS創(chuàng)建最簡單的HTTP服務(wù)器
這篇文章主要介紹了NodeJS創(chuàng)建最簡單的HTTP服務(wù)器的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-05-05