如何用C语言调用NLPIR进行中文分词

如何用C语言调用NLPIR进行中文分词,第1张

1.打开vs之后,按照下面的方式新建project。新建的工程名是text-segmentation。建好之后在你选择的那个目录会出现一个text-segmentation文件夹。

2.从nlpir官网下载相关资源,这里下载的是2013版本。下载地址:http://ictclas.nlpir.org/upload/20140324095815_ICTCLAS2014.rar

3.将下载文件解压缩,找到其中的Data文件夹、bin文件夹中的NLPIR.dll文件、include文件夹中的NLPIR.h文件、lib文件夹

中的NLPIR.lib文件,将这四个东西复制到刚刚的text-segmentation文件夹中的text-segmentation文件夹下,如下

效果:

4.点击text-segmentation文件夹下的text-segmentation.sln,在vs中打开这个项目。按照如下方式将NLPIR.h文件加入到头文件中。

5.点击project ->properties(快捷键ALT +

F7),按照下图所示的进行设置。别问我为什么这么设置,我也不懂,摸索了半天才摸索出来的,不这么设置就是搞不定。

6.在source里面新建程序新建c++源程序

7.接下来就可以在这里写代码了,下面附上一段我的代码作为例子。最关键的是前面的函数头部分,可以直接抄过去。

#ifndef OS_LINUX

#include

#pragma comment(lib, "NLPIR.lib")

#endif

#include

#include

#include

#include

#include

#include "NLPIR.h"

#include

using namespace std

void IfInit()//判断是否已经成功初始化

void IfExit()//是否成功退出

int main()

{

IfInit()//初始化程序

NLPIR_SetPOSmap(ICT_POS_MAP_SECOND)

int nitems//

nitems=NLPIR_ImportUserDict("H:\\sentence\\UserDict_manual.txt")

NLPIR_SaveTheUsrDic()

cout<<"import "<<nitems<<"

words"<<endl

//NLPIR_AddUserWord("A股")

//NLPIR_AddUserWord("沪指")

//int i

//char s[100]

//char s2[100]

//ifstream infile

////infile.open("H:\\sentence\\files to break

word.txt")

//infile.open("C:\\Users\\pc\\Desktop\\temp\\file_to.txt")

//ifstream infile2

////infile2.open("H:\\sentence\\files after break

word.txt")

//infile2.open("C:\\Users\\pc\\Desktop\\temp\\file_after.txt")

//for(i=0i<717696i++)//1798

//{

// if (i<350000)

// {

// infile.getline(s,100)

// infile2.getline(s2,100)

// continue

// }

// infile.getline(s,100)

// infile2.getline(s2,100)

// NLPIR_FileProcess(s,s2,0)

// cout<<i+1<<endl

//}

NLPIR_FileProcess("try.txt","try_result.txt",0)

IfExit()//退出

system("pause")

return 0

}

void IfInit()//判断是否已经成功初始化

{

if(!NLPIR_Init(0,UTF8_CODE))

{

cout<<"Init fails"<<endl

exit(EXIT_FAILURE)

}

else

{

cout<<"Init ok"<<endl

}

}

void IfExit()//是否成功退出

{

if(!NLPIR_Exit())

{

cout<<"Exit fails"<<endl

}

else

{

cout<<"Exit ok"<<endl

}

}

8.若函数报错,可以去text-segmentation文件夹中的text-segmentation文件夹下查看log文件。常见的错误是Initial

Fail,这很可能是因为license过期了,解决方法可见http://blog.csdn.net/heyu158/article/details/17525753

//

// Wordsplit.cpp

//

// Target: Find all possible splitting of a sentence given a dictionary dict

// Howto: refer to main

//

// Created by Rachel on 14-8-16.

// Copyright (c) 2014年 ZJU. All rights reserved.

//

#include <iostream>

#include <stdio.h>

#include "vector"

#include <set>

#include<unordered_set>

using namespace std

class Wordsplit {

private:

vector<string>list

bool match(string s, string cur_ele){

int l = cur_ele.length()

if (s.substr(0,l)==cur_ele) {

return true

}

return false

}

bool validate(string s, unordered_set<string>&dict){

//1. calculate all alphabets in the query

set<char>alpha

for (int i=0i<s.length()i++) {

alpha.insert(s[i])

}

//2. calculate all alphabets in the dictionary

set<char>beta

unordered_set<string>::iterator dict_it

for (dict_it = dict.begin()dict_it!=dict.end()dict_it++) {

for (int i=0i<(*dict_it).length()i++) {

beta.insert((*dict_it)[i])

}

}

set<char>::iterator it

for (it = alpha.begin()it!=alpha.end()it++) {

if (beta.find(*it)==beta.end()) {

return false

}

}

return true

}

public:

string split(string s, unordered_set<string>&dict, string cur_str){

if (s.length()==0) {

list.push_back(cur_str.substr(0,cur_str.length()-1))

return s

}

//cout<<s<<endl

unordered_set<string>::iterator it

for (it=dict.begin()it!=dict.end()it++) {

if (match(s, (*it))) {

string tmp_str = cur_str

string latter = s.substr(it->length(), s.length()-it->length())

cur_str += (*it) + " "// add current word to cur_str

cur_str += split(latter, dict, cur_str)// split remaining words

cur_str = tmp_str//back to last status

}

}

return "no result"

}

vector<string>main(string s, unordered_set<string>&dict) {

if (!validate(s, dict)) {

return list

}

split(s, dict, "")

return list

}

}

int main()

{

Wordsplit s

unordered_set<string>L={"程序员","公务员","员","我","喜","做","程序","一","欢","喜欢","做一个","一个"}

vector<string>V = s.main("我喜欢做一个程序员", L)

vector<string>::iterator it

for (it=V.begin()it!=V.end()it++) {

cout<<(*it)<<endl

}

}

没有挂网公布,需要咨询专业人士。

C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发。C语言能以简易的方式编译、处理低级存储器。

C语言是仅产生少量的机器语言以及不需要任何运行环境支持便能运行的高效率程序设计语言。尽管C语言提供了许多低级处理的功能,但仍然保持着跨平台的特性,以一个标准规格写出的C语言程序可在包括类似嵌入式处理器以及超级计算机等作业平台的许多计算机平台上进行编译。

C语言诞生于美国的贝尔实验室,由丹尼斯·里奇(Dennis MacAlistair Ritchie)以肯·汤普森(Kenneth Lane Thompson)设计的B语言为基础发展而来,在它的主体设计完成后,汤普逊和里奇用它完全重写了UNIX,且随着UNIX的发展,c语言也得到了不断的完善。

为了利于C语言的全面推广,许多专家学者和硬件厂商联合组成了C语言标准委员会,并在之后的1989年,诞生了第一个完备的C标准,简称“C89”,也就是“ANSI C”,截至2020年,最新的C语言标准为2018年6月发布的“C18”。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7781384.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-09
下一篇 2023-04-09

发表评论

登录后才能评论

评论列表(0条)

保存