clarke等人描述的gcl区域代数和查询语言的python实现。

pyra的Python项目详细描述


pyra-python区域代数
==





pyra是[1]中描述的区域代数和查询语言的python实现。
区域代数被用来有效地查询半结构化文本文档。这个特殊的
区域代数在广义一致列表(gcls)上操作。gcl是区域
(也称为区段)的列表,这些区域遵循以下约束:*列表中的任何区域都不能有嵌套在同一列表中的另一个
区域*。有关此区域
代数及其有用原因的快速在线介绍,请访问:

[wumpus search](http://www.wumpus-search.org/docs/gcl.html)


通常,此区域代数适合从具有轻量级
结构的文档中提取数据,并且是可选的。更多的重量级解决方案,如xpath查询。



r/>"token"标记是带引号的字符串。使用"\"转义引号,和"\"转义转义
"a","b","c"短语是逗号分隔的标记
int位置表示为裸整数(例如4071)


(这里a和b是任意区域代数表达式,n是整数)
----------------------------------------------------------
a^b返回同时匹配a和b的所有区段
a+b返回同时匹配a或b(或两者)的所有区段
a..b返回以a开头以b结尾的所有区段
a>;b返回与a匹配并包含与b匹配的区段的所有区段
a<;b返回与a匹配的所有区段,包含在与b匹配的区段中他开始投射。对于a中的每个区段(u,v),返回(u,u)
{a}的"end"投影。对于a中的每个区段(u,v),return(v,v)

[n]返回长度n的所有区段,其中n是一个整数(基本上是一个滑动窗口)


/>a/<;b返回与a匹配的所有区段,而不包含在与b匹配的区段中


\返回所有剧本、动作、场景等的标题**

"<;title>;"."<;/title>;"

结果:
片段(15,23):<;title>;安东尼和克利奥帕特拉的悲剧<;/title>;
片段(68,72):<;title>;戏剧人物<;/title>;
切片(279283):<;title>;第一幕<;/title>;
切片(284295):<;title>;克利奥帕特拉宫殿的亚历山大一景房间<;/title>;
切片(10971105):<;title>;场景二相同的另一个房间<;/title>;
切片(35263534):<;title>;scene iii相同的另一个房间<;/title>;
切片(48894898):<;title>;scene iv rome octavius caesar s house<;/title>;
切片(58855893):<;title>;scene v alexandria cleopatra s palace<;/title>;。

…而且,还有更多…


**返回所有播放的标题**
**(即,在播放中找到的第一个标题)**

("<;title>;"."<;/title>;")<;("<;play>;"."<;/title>;")

结果:
片段(15,23):<;title>;悲剧安东尼和克利奥帕特拉之日ICE(4051440522):<;title>;结束时一切顺利<;title>;
切片(7556775573):<;title>;随心所欲<;title>;
切片(107909107915):<;title>;错误喜剧<;title>;
切片(130779130785):<;title>;科里奥拉努斯的悲剧<;title>;
切片(173424173427):<;title>;辛白林<;title>;
切片(214962214969):<;title>;仲夏夜之梦<;title>;
切片(239304239313):<;title>;登马王子的悲剧RK<;/标题>;

…还有更多…



**返回包含单词"henry"的所有剧本的标题*

(("<;title>;"."<;/title>;")<;("<;play>;"."<;/title>;")>;"henry"

结果:
片段(322005322014):<;title>;henry的第二部分第四个切片(361126361134):<;title>;亨利五世的一生<;title>;
切片(399220399229):<;title>;亨利六世的第一部分<;title>;
切片(431541431550):<;title>;亨利四世的第二部分e第六部分<;/title>;
片段(469240469249):<;title>;第六部分亨利的第三部分<;/title>;
片段(5059205932):<;title>;亨利生平的著名历史……


**返回短剧标题(4个或几个字)**
**(注意:我们必须在标记计数中包含标记)**

(("<;title>;"".""<;title>;")<;("<;play>;"".""<;title>;")<;[6]


结果:
切片(7556775573):<;title>;根据您的喜好<;title>;
切片(107909107915):<;title>;错误的喜剧<;title>;
切片(130779130785):<;title>;科里奥拉努斯的悲剧<;title>;
切片(173424173427):<;title>;辛贝林<;title>;
切片(677133677138):<;title>;量度<;title>;
切片(744759744765):<;title>;麦克白的悲剧<;title>;
切片(771553771559):<;title>;威尼斯商人<;title>;
切片(80254082546):<;title>;无事生非<;title>;
切片(875994876000):<;title>;伯里克利斯轮胎王子<;title>;
slice(10817501081754):<;title>;暴风雨<;title>;
slice(12339681233974):<;title>;冬季故事<;title>;


**返回包含短语"是不是"的所有剧本的标题be'**

(("<;title>;"."<;/title>;")<;("<;play>;"."<;/title>;"))<;("<;play>;"."<;/play>;")>;("to","be","or","not","to","be")))

结果:
切片(2393042393133):<;title>;丹麦王子哈姆雷特的悲剧<;/title>;

\

以下是上述查询的示例实现:

r/>gcl=gcl(iidx)

播放标题=g.parse('("<;title&g t;"."<;title>;")<;("<;play>;"."<;title>;"))


包含单词"henry"
"亨利",播放标题:
print("%s\t%s",(str(myslice),"".join(corpus[myslice])


对于g.parse中的myslice('%1<;(%2&g t;("witch"^"duncan"))',play_titles,whole_play s):
print("%s\t%s",(str(myslice),".join(corpus[myslice])



皮拉使用的语法草图:

gcl_expr:(gcl_expr)
gcl_expr…gcl_u expr
gcl_expr>;gcl_expr
gcl_expr<;gcl_expr
[int]
int
短语

短语:字符串,短语
string

参考文献

[1]Clarke,C.L.,Cormack,G.V.,&Burkowski,F.J.(1995)。结构化文本搜索代数及其实现框架。《计算机期刊》,38(1),43-56。芝加哥

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
我可以用C++代码使用java代码吗?   java使用JSR303在派生类中提供更具体的约束   java在这个查找唯一路径数算法中我做错了什么?   java如何为2个不同的服务提供商使用2个不同的SSL证书?   java在Gridview上绘制文本   java使用连接for循环构建字符串名   java StringBuilder拆分无法处理某些文件   java事件关注EditText   Java Web Start“找不到URL的缓存资源”   java程序从命令行运行的速度比在Eclipse中慢   java为什么HttpServletRequest会截断#字符上的url输入?   java自定义折叠工具栏平滑标题大小调整   使用Mockito对安卓 java中调用另一个静态函数的函数进行单元测试   http在java客户机中使用cachecontrol头   java如何使用。是否使用Delimiter从输入文件中排除标点符号和数字?   使用上下文作为参数/参数的java   java更有效地从Jar中提取文件   java为多个JButton提供相同的actionListener