當前位置:首頁 » 編程語言 » 中文分詞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;
}
}