1. 程式人生 > >Python自然語言處理工具小結

Python自然語言處理工具小結

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.StringReader;
import java.util.Collections;

import opennlp.tools.namefind.NameFinderME;
import opennlp.tools.namefind.NameSample;
import opennlp.tools.namefind.NameSampleDataStream;
import opennlp.tools.namefind.TokenNameFinderModel;
import opennlp.tools.util.ObjectStream;
import opennlp.tools.util.PlainTextByLineStream;
import opennlp.tools.util.featuregen.AggregatedFeatureGenerator;
import opennlp.tools.util.featuregen.PreviousMapFeatureGenerator;
import opennlp.tools.util.featuregen.TokenClassFeatureGenerator;
import opennlp.tools.util.featuregen.TokenFeatureGenerator;
import opennlp.tools.util.featuregen.WindowFeatureGenerator;

/**
 * 中文命名實體識別模型訓練元件
 * 
 * @author ddlovehy
 *
 */
public class NamedEntityMultiFindTrainer {

	// 預設引數
	private int iterations = 80;
	private int cutoff = 5;
	private String langCode = "general";
	private String type = "default";

	// 待設定的引數
	private String nameWordsPath; // 命名實體詞庫路徑
	private String dataPath; // 訓練集已分詞語料路徑
	private String modelPath; // 模型儲存路徑

	public NamedEntityMultiFindTrainer() {
		super();
		// TODO Auto-generated constructor stub
	}

	public NamedEntityMultiFindTrainer(String nameWordsPath, String dataPath,
			String modelPath) {
		super();
		this.nameWordsPath = nameWordsPath;
		this.dataPath = dataPath;
		this.modelPath = modelPath;
	}

	public NamedEntityMultiFindTrainer(int iterations, int cutoff,
			String langCode, String type, String nameWordsPath,
			String dataPath, String modelPath) {
		super();
		this.iterations = iterations;
		this.cutoff = cutoff;
		this.langCode = langCode;
		this.type = type;
		this.nameWordsPath = nameWordsPath;
		this.dataPath = dataPath;
		this.modelPath = modelPath;
	}

	/**
	 * 生成定製特徵
	 * 
	 * @return
	 */
	public AggregatedFeatureGenerator prodFeatureGenerators() {
		AggregatedFeatureGenerator featureGenerators = new AggregatedFeatureGenerator(
				new WindowFeatureGenerator(new TokenFeatureGenerator(), 2, 2),
				new WindowFeatureGenerator(new TokenClassFeatureGenerator(), 2,
						2), new PreviousMapFeatureGenerator());

		return featureGenerators;
	}

	/**
	 * 將模型寫入磁碟
	 * 
	 * @param model
	 * @throws Exception
	 */
	public void writeModelIntoDisk(TokenNameFinderModel model) throws Exception {
		File outModelFile = new File(this.getModelPath());
		FileOutputStream outModelStream = new FileOutputStream(outModelFile);
		model.serialize(outModelStream);
	}

	/**
	 * 讀出標註的訓練語料
	 * 
	 * @return
	 * @throws Exception
	 */
	public String getTrainCorpusDataStr() throws Exception {

		// TODO 考慮入持久化判斷直接載入標註資料的情況 以及增量式訓練

		String trainDataStr = null;
		trainDataStr = NameEntityTextFactory.prodNameFindTrainText(
				this.getNameWordsPath(), this.getDataPath(), null);

		return trainDataStr;
	}

	/**
	 * 訓練模型
	 * 
	 * @param trainDataStr
	 *            已標註的訓練資料整體字串
	 * @return
	 * @throws Exception
	 */
	public TokenNameFinderModel trainNameEntitySamples(String trainDataStr)
			throws Exception {
		ObjectStream<NameSample> nameEntitySample = new NameSampleDataStream(
				new PlainTextByLineStream(new StringReader(trainDataStr)));
		
		System.out.println("**************************************");
		System.out.println(trainDataStr);

		TokenNameFinderModel nameFinderModel = NameFinderME.train(
				this.getLangCode(), this.getType(), nameEntitySample,
				this.prodFeatureGenerators(),
				Collections.<String, Object> emptyMap(), this.getIterations(),
				this.getCutoff());

		return nameFinderModel;
	}

	/**
	 * 訓練元件總呼叫方法
	 * 
	 * @return
	 */
	public boolean execNameFindTrainer() {

		try {
			String trainDataStr = this.getTrainCorpusDataStr();
			TokenNameFinderModel nameFinderModel = this
					.trainNameEntitySamples(trainDataStr);
			// System.out.println(nameFinderModel);
			this.writeModelIntoDisk(nameFinderModel);

			return true;
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();

			return false;
		}
	}
}

相關推薦

Python自然語言處理工具小結

import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.StringReader; import java.util.Collections; impor

Python自然語言處理(NLP)工具小結

Python 的幾個自然語言處理工具 自然語言處理(Natural Language Processing,簡稱NLP)是人工智慧的一個子域。自然語言處理的應用包括機器翻譯、情感分析、智慧問答、資訊提取、語言輸入、輿論分析、知識圖譜等方面。也是深度學習的一個分

Python中呼叫自然語言處理工具HanLP手記

HanLP方法封裝類: 1. # -*- coding:utf-8 -*- 2. # Filename: main.py 3. 4.from jpype import * 5.  5.startJVM(getDefaultJVMPath(), "-Djava.class.path=C:\h

斯坦福自然語言處理工具python環境配置

斯坦福自然語言處理工具python環境配置 1. 簡介 Stanford nlp group 是世界知名的自然語言處理研究組,該組的研究內容涵蓋了從基本的計算語言原理研究到NLP的關鍵應用技術。其中,該組所開發的coreNLP工具被廣泛應用,該工具提供了分詞、詞性標註、語

Python 自然語言處理(NLP)工具庫彙總

6.spaCy 這是一個商業的開源軟體。結合了Python 和Cython 優異的 NLP 工具。是快速的,最先進的自然語言處理工具。 網站: 安裝: pip install spacy 7.Polyglot Polyglot 支援大規模多語言應用程式的處理。它支援165種語言的分詞,196中語言的辨識,

Python 2.7下下載並安裝nltk (自然語言處理工具包)

>>>import nltk >>>nltk.download() 下載器上的Collection選項卡顯示軟體包如何被打包分組。選擇book標記所在行,然後選擇下載路徑(注意不要安裝到二級或三級目錄下,最好安裝到D盤或C盤的根目錄下,否則會報錯, 我這裡地址就是不

自然語言處理工具包HanLP的Python介面

pyhanlp: Python interfaces for HanLP HanLP的Python介面,支援自動下載與升級HanLP,相容py2、py3。 安裝 pip install pyhanlp 使用命令hanlp來驗證安裝,如因網路等原因自動安裝HanL

自然語言處理工具python呼叫hanlp的方法步驟

Python呼叫hanlp的方法此前有分享過,本篇文章分享自“逍遙自在017”的部落格,個別處有修改,閱讀時請注意! 1.首先安

NLP-python 自然語言處理01

count ems odin 頻率分布 str sep mon location don 1 # -*- coding: utf-8 -*- 2 """ 3 Created on Wed Sep 6 22:21:09 2017 4 5 @author: A

Python自然語言處理1

cmd 輸入 函數調用 down load src 選擇 分享 cnblogs 首先,進入cmd 輸入pip install的路徑 隨後開始下載nltk的包 一、準備工作 1、下載nltk 我的之前因為是已經下載好了 ,我現在用的參考書是Python自然語言處理這本書,最

Python自然語言處理 Chapter 1

col ont otl python import 搜索 text2 div load() from __future__ import division import nltk nltk.download() from nltk.book import * #搜索文本

Python自然語言處理筆記【二】文本分類之監督式分類的細節問題

重要 探索 基於 font 產生 com 分類器 保持 聯合 一、選擇正確的特征 1.建立分類器的工作中如何選擇相關特征,並且為其編碼來表示這些特征是首要問題。 2.特征提取,要避免過擬合或者欠擬合 過擬合,是提供的特征太多,使得算法高度依賴訓練數據的特性,而對於一般化的

Python | 自然語言處理 (一)

res sent 處理 簡單的 *** ima examples 表示 rds 小白博主最近想參加一個關於NLP的比賽,於是入坑自然語言處理,想借博客一邊學習,一邊整理 首先安裝庫nltk,直接pip install nltk即可 1 from nltk.book imp

自然語言處理工具包 HanLP在 Spring Boot中的應用

本文共 782字,閱讀大約需要 2分鐘 ! 概 述 HanLP 是基於 Java開發的 NLP工具包,由一系列模型與演算法組成,目標是普及自然語言處理在生產環境中的應用。而且 HanLP具備功能完善、效能高效、架構清晰、語料時新、可自定義的特點,因此十分好上手,本文就結合 Spring Bo

《精通Python自然語言處理》高清中文版PDF+高清英文版PDF+源代碼

http 自然語言 下載 pdf color 語言 源代碼 書籍 https 下載:https://pan.baidu.com/s/1p9MgH2HDTGfUmWx8jHRsxw 《精通Python自然語言處理》高清中文版PDF+高清英文版PDF+源代碼 高清中文版PDF,

Hanlp自然語言處理工具的使用演練

Hanlp是由一系列模型與演算法組成的工具包,目標是普及自然語言處理在生產環境中的應用。Hanlp具備功能完善、效能高效、架構清洗、語料時新、可自定義的特點;提供詞法分析(中文分詞、磁性標註、命名實體識別)、句法分析、文字分類和情感分析等功能。 本篇將使用者輸入的語句根據詞庫進行分詞、關鍵詞提取、摘要提取、

Python自然語言處理—統計詞頻

一 資料的預處理 本文所有的例子我都將使用中文文字進行,所以在分析前需要對中文的文字進行一個預處理的過程(暫時只用的分詞,去除停用詞的部分後面介紹) # -*- coding:utf-8 -*- from nltk import FreqDist import jieba import py

python自然語言處理-—安裝NLTK

安裝Anaconda後,進入Prompt介面 依次輸入 easy_install pip pip install pyyaml nltk 結果如下 下載nltk中的資料集 import nltk nltk.download() 選擇book文字集合下載相關資料集

精通Python自然語言處理 pdf 下載

自然語言處理(NLP)是有關計算語言學與人工智慧的研究領域之一。NLP主要關注人機互動,它提供了計算機和人類之間的無縫互動,使得計算機在機器學習的幫助下理解人類語言。 本書詳細介紹如何使用Python執行各種自然語言處理(NLP)任務,並幫助讀者掌握利用Python設計和構建基於NLP的應用的

哈工大自然語言處理工具pyltp的本地安裝方法

在研究中發現,哈工大的LTP在分詞、實體識別等方面的效果甚至要優於中科院ICTCLAS,而且LTP還具備了目前在中文資訊處理領域較為罕見的語義角色標註(SRL)功能。以前我都是直接以get方式通過LTP-Cloud去使用的,但是由於受限於網速,當語料較大時 執行速度較慢。於是近期考慮在自己的機子