当前位置:首页 » 编程语言 » 中文分词c语言
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

中文分词c语言

发布时间: 2022-08-12 21:55:40

1. 如何用c语言写中文分词程序最大正向匹配/最大逆向匹配/双向匹配和最短路径匹配.

扫描字符串,到词库里找对应的

2. 拼音分词算法 C语言

#include <stdio.h>
#define M_JUZI 200

// 树图的链表验证结构
// 用图的链式存储来构造树,子树均记录串的静态位置(索引)
typedef struct ST_FenCi{
int LeiBie; // 连什么类别?1 : 韵母,2 : 声母
int SuoYin; // 声母后的韵母索引 或者 词语中韵母后一个字的声母索引
struct ST_FenCi *pN; // 兄弟
} FenCi;
typedef struct ST_Ci{
int SuoYin; // 在原始串内的子串(字)索引
int Chang; // 子串长度
} Ci; // 记录结果的结构

typedef struct ST_ShengMu {
char Pin[3]; // 声母字符串
FenCi *pLian; // 分词树的子树
} ShengMu; // 用来定义声母的静态集合
typedef struct ST_YunMu {
char Yin[5]; // 韵母字符串,区别于声母
FenCi *pLian; // 分词树的子树
} YunMu; // 用来定义韵母的静态集合

// 声母开字头
ShengMu smJiHe[29] = {{""},{"b"},{"c"},{"d"},{""},{"f"},{"g"},
{"h"},{""},{"j"},{"k"},{"l"},{"m"},{"n"},
{""},{"p"},{"q"},{"r"},{"s"},{"t"},{""},
{""},{"w"},{"x"},{"y"},{"z"},{"ch"},{"sh"},{"zh"}};

// 韵母收字尾
YunMu ymJiHe[24] = {{"a"},{"o"},{"e"},{"i"},{"u"},{"v"},
{"ai"},{"ei"},{"ui"},{"ao"},{"ou"},
{"iu"},{"ie"},{"ue"},
{"er"},
{"an"},{"en"},{"in"},{"un"},{"vn"},
{"ang"},{"eng"},{"ing"},{"ong"}};

// 关于分字树,完全可以按照“现代汉语词典”的音节表来构造
// 某分字子树的构造
void InitFenZiShu0() {

}

int main() {
char JuZi[M_JUZI];
//scanf("%s",JuZi);

// 算法1. 首字哈希查找,链表连字,链表连词
// 如果需要查找的表有限,可以用if ,else,也可以用哈希查找
// 待解决的问题:
// 1.1. 声母头与声母尾的混淆,两个字头之间至少相差三个位置
// 1.2. 韵母尾与声母头的混淆,上下文,回退
// 1.3. 超前搜索,首先,如果韵母可以扩展到更长的另一个韵母,
// 1.3.1 从韵母收字的时候,
// 不仅要尝试韵母的"扩展",而且要判断扩展后新韵母的后缀,
// 如果这个后缀为声母头,那么在声母头的后面是否有合适的韵母构成一个新字?
// 如果有,就需要记录这种可能,而且做好提前收尾的准备
// 如果没有,理所当然要把新的韵母继续"扩展"
// 这样的韵母比如:e->er, a->an->ang, e->en->eng, i->in->ing, u->un,
// 这样的声母比如:e, r, g
// 1.3.2 从声母找字的时候,
// 如果后面找不到声母头链表里所有的韵母,就可以扩展匹配更长的声母

// 算法2. 渐进地找到所有声母点,上下文分析,修正,分析到结构,显示
// 算法2.1 对原文的每个字,逐个匹配已知声母
// 算法2.2 已知声母,在一定范围里搜集在原文里出现的每个声母点

getchar(); // enter
return 1;
}

3. C语言如何利用最大匹配法编写中文分词的源程序

这个代码实现很简单的,就是把词典加载到map中,对一句话进行分词时,取词典中最长的词作为maxlen长度,由长到短进行匹配,然后查词典,如果词典中有就切分。

4. c语言中如何用链表实现中文分词(最大匹配法),词库word.txt,需分词文章form.txt,分词后文章to.txt。

麻烦给出具体要求。
*词库的格式具体怎样
*中文的编码具体是什么 ANSI、utf8、GB23010?
给几个简单的输入、输出样例

5. C语言 分词并显示 写函数

void Input (char *str) {
char c;
int i = 0;
while ( (c = getchar()) != '\n' && i < 81) {
* (str + i) = c;
i++;
}
}

int Split_Count (char *str, char **pStr) {
int count = 0, is_word = 0, j = 0;
char tmp[81];
for (int i = 0; i < strlen (str); i++) {
if (* (str + i) == ' ') {
if (is_word == 1) {
ss:
* (tmp + j) = '\0';
*pStr = (char *) malloc (strlen (tmp) * sizeof (char));
strcpy (*pStr, tmp); //调试了一下,到这行就出错
pStr++;
j = 0;
}
is_word = 0;
} else {
if (is_word == 0) {
count++;
}
* (tmp + j) = * (str + i);
j++;
is_word = 1;
if (i == strlen (str) - 1)
goto ss;
}
}
return count;
}

6. c语言中文分词算法

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

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”。

7. 编写简单的中文分词程序

5月29日 17:25 电脑分硬件与软件,硬件就是平时电脑城给你配的那些主板呀,键盘呀,CPU呀...等等..实实在在的东西.
软件也就是像你现在用的windows操作系统.QQ呀.杀毒软件呀,微软开发的都是些软件........等等...多得数不清
这些软件都是用编程实现的,编程里面会有很多种语言,也会分低级语言.高级语言,编程说白点就是用代码算法一些东西组成到一起,实现一些功能.来满足我们容易的操作,都是为了方便人类的
如果你要学还是先从C语言学起吧,基础语言.
建议你买本书,或到网上找电子书下下来看看..

8. 高分求c语言中文分词源代码

楼上有几位说的不对。处理中文并不等同于显示中文,任何汉字在内存中只不过也是一堆0101而已了,对于中文分词,完全可以不需要显示中文。

究竟什么叫做“c语言不支持中文”?显然有些人把语言和开发环境混为一谈了。c是一门语言,tc2是开发环境。即使tc2本身是dos下的软件,如果将它在windows非全屏方式下运行,一样可以显示中文的,不过屏幕边缘可能有乱码。tc2开发环境并不负责中文的解码,但是操作系统替他做了。

至于分词,只要最终结果不要求显示在屏幕上,有什么不能用c做的?多半情况是,分词程序运行在unix服务器上,接受客户端或服务器上的程序调用并且返回结果,这根本不要求显示。仅仅是和数据库、算法、内存打交道,搞什么“不支持中文”?

多研究些原理,少误人子弟吧

以上。
看不下去的老狼

9. 用c语言进行中文分词,给定一个词典,一篇文章,一个参照的utf8编码怎

//
// 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=0; i<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=0; i<(*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;
}
}