Erlang全文合法单词搜索程序
来源:互联网 发布:90年代经典网络歌曲 编辑:程序博客网 时间:2024/06/10 01:50
合法单词,这里主要指原子和变量。
代码如下:
%%----------------------------------------Get Words From Text-----------------------------------
f(L) ->
Dict=main(L,[]),
List=dict:fetch_keys(Dict),
lists:sort(List).
cl([H|T],Parent) ->
Parent!{H,is_letter(H)},
cl(T,Parent);
cl([],Parent) ->
Parent!over.
is_letter(H) ->
L="qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM_",
case lists:member(H,L) of
true ->
true;
false ->
false
end.
main(L,L2) ->%%L2 is recommanded to be []
S=self(),
Dict0=dict:new(),
cl(L,S),
loop(L2,Dict0).
loop(L2,Dict) ->
receive
{H,true} ->
L3=[H|L2],
case dict:is_key(lists:reverse(L2),Dict) of
true ->
Dict0=dict:erase(lists:reverse(L2),Dict),
Dict1=dict:store(lists:reverse(L3),list,Dict0),
put(state,true),
loop(L3,Dict1);
false ->
Dict1=dict:store(lists:reverse(L3),list,Dict),
put(state,true),
loop(L3,Dict1)
end;
{_H,false} ->
case get(state) of
true ->
put(state,false),
loop([],Dict);
false ->
loop(L2,Dict);
undefined ->
put(state,false),
loop(L2,Dict)
end;
over ->
Dict
end.
这个程序是比较丑陋的,因为使用了进程字典,频繁改写状态,破坏了Erlang的优美特性。
程序的主要思想是开启一个进程去判断List中的每个字符是不是属于合法的字符(就是大小写加上下划线),将结果返回给主进程,主进程处理之后保存在搜集用的字典里,最后将键值(keys)拿出来就可以了。
稍加改动,可以从文本中提取各种需要的模式。
- Erlang全文合法单词搜索程序
- idea的单词的全文搜索
- 全文搜索
- 全文搜索
- 全文搜索
- 全文搜索
- 单词搜索
- 单词搜索
- 单词搜索
- 一个在文件中搜索单词的程序
- erlang搜索目录
- [Erlang 0003] 编译Erlang程序
- 页面内全文搜索
- 全文搜索lucene简介
- SQL SERVER全文搜索
- MySQL 全文搜索
- [转] 走进全文搜索
- MySQL 全文搜索
- 第一次部署GoogleAppEngine网络程序
- ASP+SQL用户登录验证,总提示密码错误(数据库中就那密码)
- 重读《Programming Pearls》之四:Writing Correct Programs
- 悟透JavaScript
- 中文数字转阿拉伯数字的小程序
- Erlang全文合法单词搜索程序
- pku 3006
- 解剖JavaScript中的null和undefined
- JavaScript获取元素在浏览器画布中的绝对位置
- 测试一下。
- JAVA实现定时器功能详解
- 什么是底部放量
- xcache本地缓存的设计(二)
- Android 2D图像显示