2012-09-12 213 views
2

我正在考虑用C语言来做一个语言识别程序。我已经在互联网上搜索并找到了基于N-Gram的文本分类文章,并且我还创建了自己的一套实用程序来处理我的一些编程需求。现在,我想尝试首先创建一个简单的程序,用平假名,片假名和汉字写成的printf日语单词。我相信这可以用C语言完成,但我不确定如何实现它,也许这与unicode编程有关。任何人都可以尝试向我解释我需要首先学习什么,需要什么样的库(包括),或者可以使用哪些实用工具作为我的基础来实现和实施此计划。语言识别

+0

这听起来有点不符合经验。 – unwind

+0

你为什么选择C来完成那项任务? – ThomasMore

+0

@ThomasMore,只是为了好玩和体验。 – chrismsawi

回答

0

我不认为C是这个项目的最佳选择。 IMO你应该考虑使用高级语言(如C#),其中有一些惊人的内置支持,只是一个简单的例子:

C#:

byte[] buffer = new byte[] { 0xE8, 0x82, 0xB2, 0xE5, 0x84, 0xBF }; 
string s = Encoding.UTF8.GetString(buffer); 

繁荣。完成。

现在在C中,据我所知,没有简单的标准编码/解码库或实用程序。你必须手工制作这些东西。我自己一开始就这样做,但意识到这是浪费我的时间。 :)

如果你坚持使用C,我建议你先阅读关于不同类型的编码(多字节/宽字节编码)的所有内容。网上有很多关于Unicode的很好的教程,帮助您入门(这里是我使用的good one)。

编辑:好的,如果没有C#,接下来就让我们在C“短”的例子......再次,这是假定你了解编码(注意,使用了宽字符的:为wchar_t):

#include <stdio.h> 
#include <stdlib.h> 
#pragma import(__use_utf8_ctype) 
#include <wchar.h> 
#include <locale.h> 

int main(int argc, char *argv[]) 
{ 
    wchar_t water = 27750; 
    setlocale(LC_ALL, ""); 

    printf("%lc",water); 
    return 0; 
} 

[email protected]:~> ./a.out 
汦 

这就是中国...我认为这是相同的日本汉字,但我对日语不太好... 有如何打印,现在存储类似的作品,你将存储在一个wchar_t,然后做你的比较。

+0

执行时间非常短,而且非常棒。但有一件事阻碍我这样做,那就是我的盒子是linux,我相信C#是.NET框架的一部分。不管怎么说,还是要谢谢你! – chrismsawi

+0

恕我直言OP是要求一个分类器,而不是一种方式来转换(iconv在Linux上)表示/编码/字符集之间。 – wildplasser

+0

@chrismsawi .NET(纯粹的ms部分除外)和linux混合使用[mono](http://www.mono-project.com/Main_Page) – Kwariz