自然语言处理NLP论文文档格式.docx
《自然语言处理NLP论文文档格式.docx》由会员分享,可在线阅读,更多相关《自然语言处理NLP论文文档格式.docx(6页珍藏版)》请在冰豆网上搜索。
实体是存储在数据库中的数据项,联系是联接查询句子中实体的词或词组,如句子CitiesinthestateCalifornia,这里的两个实体Cities和state是由联系in联接的,词the在这里被忽略,而California被看做是state实体的一个实例。
Geobase通过将用户的查询与实体联系网络进行匹配来分析查询句子。
如查询句子:
whichriversrunthroughstatesthatborderthestatewiththecapitalAustin?
首先忽略某些词:
which、that、the、?
,其结果查询句子为:
riversrunthroughstatesborderstatewithcapitalAustin,其次找出实体与联系的内部名,实体可能有同义词、复数,联系也有同义词并可能由几个词组成等,经过转换后,查询句子为:
riverinstateborderstatewithcapitalAaustin,通过查找statewithcapitalAustin的state,Geobase再找出与这个state相邻接的所有的states,最后找出runthrough(由assoc("
in"
["
run"
"
through"
])转义为in)states的rivers。
2.2数据库及实体联系网络
数据库谓词举例如下:
state(Name,Abbreviation,Capitol,Area,Admit,Population,City,City,City,City)
city(State,Abbreviation,Name,Population)
实体联系网络结构schema(Entity,Assoc,Entity)如下:
schema("
population"
of"
state"
)
city"
)}
实体对数据库查询的接口,通过谓词db和ent实现,如:
db(ent,assoc,ent,string,string)
ent(ent,string)
2.3Geobase分析器
分析器用来识别查询句子的结构,Geobase把查询的句子分类为九种类型。
分析使用一种“差分表”方法,分析器中第一个参数是过滤后的表、第二个参数对应实体名,最后一个参数是分析器建立的查询结构,如:
pars(LIST,E,Q):
-s_attr(LIST,OL,E,Q),OL=[],!
.Q为查询结构
如分析句子“Howlargeisthetownnewyork?
”,首先过滤器给出待分析词表:
["
large"
"
town"
new"
york"
],然后调用分析器谓词pars,即依次执行如下谓词:
s_attr([BIG,ENAME|S1],S2,E1,q_eaec(E1,A,E2,X)):
-第一个s_attr子句
ent_name(E2,ENAME),由town转义为city
size(E2,BIG),匹配size("
entitysize(E2,E1),匹配entitysize("
schema(E1,A,E2),匹配schema("
get_ent(S1,S2,X),!
.返回实体名等
一旦分析器分析完一个句子,Geobase便调用谓词db和ent给出查询结果。
3.Geobase模型的汉化研究及实现
对Geobase模型的汉化研究即通过对Geobase及自然语言处理过程的汉化,使之能识别汉语句子的输入,并利用这个识别汉语句子的自然语言处理系统查询存储有中国地理信息的数据库。
3.1汉语句子与英语句子特点
汉语字或词与英语单词或词组一样既有复数形式,也有同义词。
一个差别是:
英语句子的每个单词之间是以空格分隔的,这使得在处理英语句子时比较方便,并且被分隔的独立的单词本身已经表明了其所含的语义,如:
WhatisthehighestmountaininCalifornia?
,利用VisualProlog中的fronttoken函数很容易将此句处理成一个表:
[“What”,”is”,”the”,”highest”,”mountain”,”in”,”California”,”?
”],并且表中各项都有一定的语义。
而对汉语句子来说,“加利福尼亚最高的山是什么?
”,不能直接用fronttoken函数处理成表,较难分清哪几个汉字应该连接在一起,具有独立的语义,这些需要在识别汉语句子时做特殊处理,即汉语句子分词,并且由于汉语语序与英语语序不同,在汉化的Geobase中要调整语序。
3.2Geobase模型汉化的其它考虑及基本结构图
①对原Geobase模型所提供的语言集GEOBASE.LAN进行汉化,使其内容为汉字。
②对原Geobase模型所提供的数据库文件GEOBASE.DBA进行调整:
建立一个ORACLE数据库,在其中存储中国的地理信息数据,由另外的软件对其进行输入与维护。
在汉化Geobase中查询之前,从ORACLE中导出数据表即形成GEOBASE.DBA文件。
③对原Geobase模型的程序代码进行修改,以配合汉化的语言集GEOBASE.LAN及数据库GEOBASE.DBA,如对谓词db、ent做修改。
④原Geobase模型是基于WINDOWS平台单用户的自然语言处理查询系统,为了使其能在更大的范围内使用,改造Geobase使其能在Internet/Intranet上应用。
基于WEB与汉语自然语言处理的地理信息查询系统基本结构图如下:
登录网站
4.处理汉语句子的算法及程序脚本
4.1基于VisualProlog汉语句子分词算法
此汉语句子分词算法以最大匹配算法为基础。
首先建立一个汉字词库(也可利用已有的相同格式的词库),每行存储一个汉字词组,词组长短各异,此词库配合分词算法使用。
现以分词最大长度为4个汉字为例描述此分词算法如下:
①在VisualProlog中调用词库str20.txt,并形成词库表LIST20,表中的每个项是词组。
读入待分词的文件str2.txt,也形成一个表LIST22,表中的每个项是一个单独的汉字。
②当表LIST22为空表时,分词结束(将得到的表LL1反序,即可用于分析器分析)。
否则,从表LIST22前端取4个汉字,组成一个词组,并与表LIST20中各项匹配,如匹配成功(即此词组是表LIST20中的一项),则将此词组写入表LL1中,使表LIST22等于去掉此4个汉字后剩余的表,然后转②继续分词;
如不匹配或表LIST22长度小于4时,则转③。
③从表LIST22前端取3个汉字,组成一个词组,并与表LIST20中各项匹配,如匹配成功,则将此词组顺序写入表LL1中,使表LIST22等于去掉此3个汉字后剩余的表,然后转②继续分词;
如不匹配或表LIST22长度小于3时,则转④。
④从表LIST22前端取2个汉字,组成一个词组,并与表LIST20中各项匹配,如匹配成功,则将此词组顺序写入表LL1中,使表LIST22等于去掉此2个汉字后剩余的表,然后转②继续分词;
如不匹配或表LIST22长度小于2时,则转⑤。
⑤从表LIST22前端取1个汉字,与表LIST20中各项匹配,如匹配成功,则将此汉字顺序写入表LL1中,使表LIST22等于去掉此1个汉字后剩余的表,然后转②继续分词;
如不匹配或表LIST22长度小于1时,则转②。
4.2汉语句子分词算法程序脚本
PREDICATES
nondetermprocess4(STRINGLIST,STRINGLIST,STRINGLIST)
nondetermcondcf(STRINGLIST,STRINGLIST)
nondetermattach(STRINGLIST,STRINGLIST,STRINGLIST)
nondetermmember(STRING,STRINGLIST)
reverse(STRINGLIST,STRINGLIST)
reverse1(STRINGLIST,STRINGLIST,STRINGLIST)
CLAUSES
member(X,[X|_]).
member(X,[_|L]):
-member(X,L).
reverse(X,Y):
-
reverse1([],X,Y).
reverse1(Y,[],Y):
-!
.
reverse1(X1,[U|X2],Y):
reverse1([U|X1],X2,Y).
reverse1(_,_,_):
-errorexit.
condcf(L1,L2):
not(eof(input)),readln(B),attach(L1,[B],Lnew),condcf(Lnew,L2).
condcf(L,L).
attach([],L,L).
attach([X|L1],L2,[X|L3]):
-attach(L1,L2,L3).
process4([],_,LL):
reverse(LL,LL1).
process4([HEAD1,HEAD2,HEAD3,HEAD4|REST],LIST200,LL):
concat(HEAD1,HEAD2,N1),concat(HEAD3,HEAD4,N2),
concat(N1,N2,N),member(N,LIST200),attach([N],LL,LL1),
process4(REST,LIST200,LL1),!
process4([HEAD1,HEAD2,HEAD3|REST],LIST200,LL):
concat(HEAD1,HEAD2,N1),concat(N1,HEAD3,N),
member(N,LIST200),attach([N],LL,LL1),
process4([HEAD1,HEAD2|REST],LIST200,LL):
concat(HEAD1,HEAD2,N),member(N,LIST200),attach([N],LL,LL1),
proces