Monthly Archives: October 2007

办事效率

据说U. Pitts的管理在全美大学里都是比较乱的。今天跟书功跑了一趟OIS (Office of International Services),仅完成了部分registration,还要办ssn,mobile phone,Pitts Id,以后也许还要弄个driver license开开,想着就头痛。

有朋自远方来

L同志打电话过来的时候,张口就叫我大名,很熟的样子,手机的新的,却不报上他自己的名字,害的我琢磨了好一阵子,才想可能是L这个家伙。他说已经在兰州。下班后叫上CXC和WLZ,跑到地质宾馆,见面后免不了一阵感慨,光阴易逝。CXC甚至是大学毕业后都没见着,怕有10余年了。C感叹说如果在大街上碰着,估计都不敢贸然相认。

借这个机会,我联系了在兰的全部同学,在胖妈妈聚会。除了我借口开车,不敢多喝,其余TX们我想都喝好了,L估计心情不错,7、8两估计是有的。到静宁路的歌来美KTV的时候,他倒在沙发就睡,怎么叫也不醒,你说睡好了也可以,2小时后他居然又吐了,不划算。不过大家的心情都是很好的。这次人来的也比较全,说是大家都在兰,这个城市也不大,但有TX我都是1年多没见着了,只偶尔通过电话。

前面去北京的时候还见着HCY,和HZJ。HCY刚从日本回来,我也是2年多没见着了,他媳妇刚给他生了个漂亮女baby。HZJ前面从刚果金回来后一直没见,现在常驻长沙,在北京也难得一见。这次还麻烦HZJ驱车满北京城跑,完了还送到机场,真是太麻烦他了。

ArcIMS ArcXML 元数据搜索中文关键词问题

或者在c#代码中直接用中文字符构建 SEARCH_METADATA将搜索失败,提示非法的ArcXML
解决方法是使用中文的unicode表示,即旞类似的方式
提供了一个转换函数:

/// <summary>
/// 将汉字变成 黑&27827;的ascii编码
/// </summary>
/// <param name="text"></param>
/// <returns></returns>
public static string UnicodeEncode(string text)
{
char[] chars = System.Web.HttpUtility.HtmlEncode(text).ToCharArray();
System.Text.StringBuilder result = new System.Text.StringBuilder(text.Length + (int)(text.Length * 0.1));

foreach (char c in chars)
{
int value = Convert.ToInt32(c);
if (value > 127)
result.AppendFormat("&#{0};", value);
else
result.Append(c);
}

return result.ToString();
}

ESRI本身提供的metadata explorer搜索中文关键词时有问题,是因为它的代码将中文解释成了 &amp;26789;类似,而不是梥,可能是将&再次解释了,搜索时将不返回结果。不知道9.1及以后版本的arcims metadata explorer里是否已经更正。

Gold Parser文本词法分析

在westdc的搜索输入字符串时用了一下Gold Parser,感觉真是个好东西,不过学起来有点费劲,花了我3天时间,才逐渐明白并动手做了一个比较简单的字串分析器。代码如下:

! GOLD Parser Builder
! Version 3.4.4
!
"Name" = "Simple search Grammer"
"Version" = "1.0"
"Author" = "Zhuotong Nan"

"Start Symbol" = <Query>

!—————–Sets
!Valid char for string keyword
{kw1} = {All Valid} – {Control Codes} – ["]

!Valid char for non-string keyword
{kw2} = {kw1} – {Whitespace} -[()]

!—————–Terminal

SimpleKw = {kw2}+
StringKw = ‘"’ {kw1}* ‘"’

!—————–Rules

<Keyword> ::= SimpleKw | StringKw

<Unit> ::= <Keyword>
| ‘(‘ <Query> ‘)’

<And> ::= <Query> <Unit>
| <Query> ‘and’ <Unit>

<Or> ::= <Query> ‘or’ <Unit>

<Query> ::= <And>
| <Or>
| <Unit>

支持 and, or查询,kw1 and kw2 可以省略为 kw1 kw2,支持括号优先级,支持""指定字串
通过CalithaLib engine连接到c#应用程序
语法并不复杂,但用于arcims的search_metadata比较别扭,如果将分析出来的keywords组织成arcims识别的search_metadata结构费了比较大的劲

中文搜索仍有问题,明天再检查,arcims是否有专门的设置没有。