C# 字符串问题,老大们来帮帮忙,这是第二帖了。。。

sunzh1we1 2012-08-05 04:07:01
先来源代码估计大家都见过:
 GrammarBuilder gb = new GrammarBuilder();
gb.Append("打开");
gb.Append(new Choices(new string[] { "工作文档","关闭" }));
Grammar g = new Grammar(gb);
g.SpeechRecognized += new EventHandler<SpeechRecognizedEventArgs>(g_SpeechRecognized);
sre.LoadGrammar(g);
sre.RecognizeAsync(RecognizeMode.Multiple);
}));
}
public void g_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
{
try
{
if (e.Result.Text.Equals("打开工作文档"))
{
Invoke((MethodInvoker)(() =>
{
//System.Diagnostics.Process.Start();
}));
}
}
catch (Exception i)
{
MessageBox.Show(i.Message);
}
}

这是个语音识别的小程序,我的想法是将源代码中的:
 gb.Append(new Choices(new string[] { "工作文档","关闭" }));
其中的:new Choices(new string[] { "工作文档","关闭" })怎样换成文本框内的内容呢,有个txtcmd.text,里面是输入的命令,如何才能放进gb.Append();里面能执行,我试过将文本框中的内容转换为string[]形式,但是提示出错。老大们帮忙想想该怎么办啊?文本框的内容怎么写无所谓只要能运行起来就行,一开始我的文本框内容是这样输入的:"工作文档,关闭",老大们有什么好办法啊。。。。
...全文
191 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
Justin881216 2012-08-06
  • 打赏
  • 举报
回复
需要自己手动去掉这个空的字符串....
Justin881216 2012-08-06
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

引用 7 楼 的回复:

太简单的事了,有必要想这么久,问这么久?前贴好像有人给你答案了,只是你不会灵活用罢了。
首先定义一个变量用来处理:string[] 处理字符 = null;
输入字符串:"工作文档,关闭",接收和分割得到字符串数组:处理字符 = 文本框.text.Split(',');
gb.Append(new Choices(处理字符));这样就把你输入的放进去了,这是……
[/Quote]

空字符串?当输入的是"工作文档,关闭,"的时候,以逗号分割得到的字符数组是这样的{"工作文档","关闭",""},确实会有一个空的字符串
sunzh1we1 2012-08-06
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

太简单的事了,有必要想这么久,问这么久?前贴好像有人给你答案了,只是你不会灵活用罢了。
首先定义一个变量用来处理:string[] 处理字符 = null;
输入字符串:"工作文档,关闭",接收和分割得到字符串数组:处理字符 = 文本框.text.Split(',');
gb.Append(new Choices(处理字符));这样就把你输入的放进去了,这是常用基本的。
[/Quote]

老大,这我想到了,但是报错啊,显示:“phrase”不能为空字符串。
参数名: phrase

没辙了。。。
  • 打赏
  • 举报
回复
太简单的事了,有必要想这么久,问这么久?前贴好像有人给你答案了,只是你不会灵活用罢了。
首先定义一个变量用来处理:string[] 处理字符 = null;
输入字符串:"工作文档,关闭",接收和分割得到字符串数组:处理字符 = 文本框.text.Split(',');
gb.Append(new Choices(处理字符));这样就把你输入的放进去了,这是常用基本的。
threenewbee 2012-08-06
  • 打赏
  • 举报
回复
处理字符 = 文本框.text.Split(',' , StringSplitOptions.RemoveEmptyEntries);
  • 打赏
  • 举报
回复
办法不可能没有的,只是按照你给的字符串"工作文档,关闭"是不会出现空的;
如果像楼上说的那种情况就先检查输入字符串:
if (字符串.Substring(字符串.Length - 1).Contains(",")) 字符串 = 字符串.Substring(0, 字符串.Length - 1);就可以了。
sunzh1we1 2012-08-05
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

这很简单,但是恐怕你不相信。

首先需要有一个按照每一个字而组成的词典库,它将词库中所有的词都按照每一个索引,建立倒排索引。

这样,假设给一串字符串,例如“adkfkadsfkasdfasd”,就可以从树上找到所有匹配的词,例如“adk”、“adkfk”、“adkfka”、“adkfkadsf”这些都能在毫秒级别内完全枚举出来。

然后,假设要识别“关闭工作文档”中有几个词,那么可……
[/Quote]
额,我新手,我只想知道gb.Append(new Choices(new string[] { "工作文档","关闭" }));怎样填写,数据类型是string[],还是字符串类型,还是。。。怎样将文本框内容放进去。。。老大。。。
threenewbee 2012-08-05
  • 打赏
  • 举报
回复
唉,分词是一个可大可小的事情。当然,机械分词的效果是很不足的。
  • 打赏
  • 举报
回复
它将词库中所有的词都按照每一个索引 --> 它将词库中所有的词都按照每一个字索引
  • 打赏
  • 举报
回复
借助数据结构的力量,我们有十几万个词,从一段话中这样简单地分出几百个词,整个查找过程都是毫秒级的。
  • 打赏
  • 举报
回复
这很简单,但是恐怕你不相信。

首先需要有一个按照每一个字而组成的词典库,它将词库中所有的词都按照每一个索引,建立倒排索引。

这样,假设给一串字符串,例如“adkfkadsfkasdfasd”,就可以从树上找到所有匹配的词,例如“adk”、“adkfk”、“adkfka”、“adkfkadsf”这些都能在毫秒级别内完全枚举出来。

然后,假设要识别“关闭工作文档”中有几个词,那么可以从第一个字开始进行循环,反复调用上述查找过程,类似于
for(var i=0; i<input.length; i++)
foreach(var ph in 查找所有匹配的词(tree, input.SubString(i)))
yield return ph



这个程序非常简单,也就是百十来行。关键是懂得数据结构!
threenewbee 2012-08-05
  • 打赏
  • 举报
回复
中文分词算法?

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧