HanLP-停用詞表的使用示例

adnb34g發表於2019-05-22


停用詞表的修改

停用詞表在 “pyhanlp\static\data\dictionary”路徑下的“stopwords.txt”檔案中,CoreStopWordDictionary.apply方法支援去除停用詞。如果需要修改停用詞表,則直接編輯檔案“stopwords.txt”,之後刪除路徑下的“stopwords.txt.bin”,執行CoreStopWordDictionary.apply後即可自動生效。有關驗證的方法見“驗證是否生效”小節。

自定義詞語過濾方法

使用者可以透過編寫 “pyhanlp\static”路徑下的“MyFilter.java”檔案設定自己的詞語過濾方法。應當注意這裡處理的語言單位是詞語,而不是字。編輯完畢後需要編譯該檔案並生成位元組碼檔案,之後執行CoreStopWordDictionary.apply方法時就會自動呼叫使用者自己的詞語過濾方法了。這裡給出一個自定義過濾方法的編寫示例程式碼。

 

import os

from pyhanlp.static import STATIC_ROOT, HANLP_JAR_PATH

java_code_path = os.path.join(STATIC_ROOT, 'MyFilter.java')

with open(java_code_path, 'w') as out:

    java_code = """

import com.hankcs.hanlp.dictionary.stopword.CoreStopWordDictionary;

import com.hankcs.hanlp.dictionary.stopword.Filter;

import com.hankcs.hanlp.seg.common.Term;

 

public class MyFilter implements Filter

{

    public boolean shouldInclude(Term term)

    {

        if (term.nature.startsWith('m')) return false; // 數詞過濾

        if (term.nature.startsWith('q')) return false; // 量詞過濾

        if (term.nature.startsWith('t')) return false; // 時間詞過濾

        if (term.nature.startsWith("w")) return false; // 過濾標點符號

        return !CoreStopWordDictionary.contains(term.word); // 停用詞過濾

    }

}

"""

    out.write(java_code)

os.system('javac -cp {} {} -d {}'.format(HANLP_JAR_PATH, java_code_path, STATIC_ROOT))

驗證是否生效

本節給出停用詞表修改後以及使用了自定義詞語過濾方法的示例程式碼。

 

from pyhanlp import *

# 載入停用詞類

CoreStopWordDictionary = JClass("com.hankcs.hanlp.dictionary.stopword.CoreStopWordDictionary")

# 載入自定義詞語過濾邏輯

MyFilter = JClass('MyFilter')

CoreStopWordDictionary.FILTER = MyFilter()

term_list = HanLP.segment(text)

CoreStopWordDictionary.apply(term_list)


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31524777/viewspace-2645141/,如需轉載,請註明出處,否則將追究法律責任。

相關文章