zope 3的标记引擎
lovely.tag的Python项目详细描述
标记
标记引擎允许用户将标记分配给任何类型的对象。一 标记是一个简单的字符串。
< Buff行情>>>> from lovely import tag
标记引擎
标记引擎提供操作和查询的功能 标记的项目。
< Buff行情>>>> engine = tag.TaggingEngine() >>> engine <TaggingEngine entries=0>
第一步是将标记与用户的项相关联。项目是 由其intid引用,用户是系统范围内唯一的字符串,并且 标签是字符串的简单列表。
在更新引擎之前,我们需要确保持久对象可以 适应关键参考:
< Buff行情>>>> import zope.component >>> from zope.app.keyreference import testing
>>> zope.component.provideAdapter(testing.SimpleKeyReference)
相反,为添加和更新标记提供单独的api,这两个操作 通过 update() 方法完成。把它看作是更新标签 发动机. < /P> < Buff行情>
>>> engine.update(1, u'srichter', [u'USA', u'personal']) >>> engine.update(2, u'srichter', [u'austria', u'lovely']) >>> engine.update(3, u'jodok', [u'Austria', u'personal']) >>> engine.update(2, u'jodok', [u'austria', u'lovely', u'work'])
接下来,您可以问发动机几个问题。
查询标记
一个常见的请求是根据项目和用户请求标记。首先,你可以 询问特定项目的所有标签:
< Buff行情>>>> sorted(engine.getTags(items=(1,))) [u'USA', u'personal']
注意:查询方法返回集合。
< Buff行情>>>> type(engine.getTags()) <type 'set'>
方法总是返回规范化的标记字符串。也可以指定 几个项目:
< Buff行情>>>> sorted(engine.getTags(items=(1, 2))) [u'USA', u'austria', u'lovely', u'personal', u'work']
您还可以要求用户的标签:
< Buff行情>>>> sorted(engine.getTags(users=(u'srichter',))) [u'USA', u'austria', u'lovely', u'personal']
同样,您可以指定多个用户:
< Buff行情>>>> from lovely import tag0
最后,您还可以指定两者的组合:
< Buff行情>>>> from lovely import tag1
您也可以通过不指定项目或用户来查询所有标记:
< Buff行情>>>> from lovely import tag2
查询项目
此方法允许查找项。例如,我们想找到 带有"个人"标签的项目:
< Buff行情>>>> from lovely import tag3
注意:查询方法返回集合。
< Buff行情>>>> from lovely import tag4
此外,您还可以查询特定用户的所有项目:
< Buff行情>>>> from lovely import tag5
最后,您可以结合标签和用户规范:
< Buff行情>>>> from lovely import tag6
您也可以通过不指定标记或用户来查询所有项目:
< Buff行情>>>> from lovely import tag7
查询用户
与上述两种方法类似,您可以查询用户。首先我们是 查找指定特定标记的所有用户。
< Buff行情>>>> from lovely import tag8
注意:查询方法返回集合。
< Buff行情>>>> from lovely import tag9
接下来,您还可以找到用户标记的所有项目:
< Buff行情>>>> engine = tag.TaggingEngine() >>> engine <TaggingEngine entries=0>0
与以前一样,您也可以将这两个条件结合起来:
< Buff行情>>>> engine = tag.TaggingEngine() >>> engine <TaggingEngine entries=0>1
您也可以通过不指定标记或项目来查询所有用户:
< Buff行情>>>> engine = tag.TaggingEngine() >>> engine <TaggingEngine entries=0>2
查询标记对象
有时直接拥有实际的标记对象是有用的。这些 可以按标记名、用户和项目查询标记对象。
< Buff行情>>>> engine = tag.TaggingEngine() >>> engine <TaggingEngine entries=0>3
我们还可以搜索fr
标记统计
< Buff行情>>>> engine = tag.TaggingEngine() >>> engine <TaggingEngine entries=0>4
组合查询
由于这些查询方法返回集合,您可以轻松地组合它们:
< Buff行情>>>> engine = tag.TaggingEngine() >>> engine <TaggingEngine entries=0>5
更改和删除条目
"斯里克特"从美国搬到德国:
< Buff行情>>>> engine = tag.TaggingEngine() >>> engine <TaggingEngine entries=0>6
我们通过将空列表传递给update方法来删除条目:
< Buff行情>>>> engine = tag.TaggingEngine() >>> engine <TaggingEngine entries=0>7
现在让我们删除第二个项目的标记。我们要确定 找不到"srichter":
< Buff行情>>>> engine = tag.TaggingEngine() >>> engine <TaggingEngine entries=0>8
为了删除entries globaly可以使用下面描述的delete方法。
标记对象
在内部,标记引擎使用 标记 类存储有关 一个特定的项目、用户和标记名对。
< Buff行情>>>> engine = tag.TaggingEngine() >>> engine <TaggingEngine entries=0>9
标记 对象用所提到的三条信息初始化 以上,
< Buff行情>>>> import zope.component >>> from zope.app.keyreference import testing0
您还可以将这三项视为 标签。除了这三个属性之外,创建日期也是 指定:
< Buff行情>>>> import zope.component >>> from zope.app.keyreference import testing1
可标记对象
理论上所有对象都是可标记的。但这可能并不可取。因此 对象必须提供可标记的 itaggable 接口。
< Buff行情>>>> import zope.component >>> from zope.app.keyreference import testing2
>>> import zope.component >>> from zope.app.keyreference import testing3
>>> import zope.component >>> from zope.app.keyreference import testing4
然后,可标记对象可以适应 itagging 接口。为此 要工作,我们必须注册适配器:
< Buff行情>>>> import zope.component >>> from zope.app.keyreference import testing5
在我们现在可以使用标记对象之前,我们需要注册我们的标记 引擎以及作为实用程序的整数ID生成器:
< Buff行情>>>> import zope.component >>> from zope.app.keyreference import testing6
>>> import zope.component >>> from zope.app.keyreference import testing7
修改要标记的文件应失败:
< Buff行情>>>> import zope.component >>> from zope.app.keyreference import testing8
但图像可以被标记:
< Buff行情>>>> import zope.component >>> from zope.app.keyreference import testing9
起初,图像没有标记:
< Buff行情>>>> zope.component.provideAdapter(testing.SimpleKeyReference)0
现在让"srichter"和"jodok"添加一些标记:
< Buff行情>>>> zope.component.provideAdapter(testing.SimpleKeyReference)1
>>> zope.component.provideAdapter(testing.SimpleKeyReference)2
当然,您也可以只要求"srichter"的标签:
< Buff行情>>>> zope.component.provideAdapter(testing.SimpleKeyReference)3
此外,您还可以请求查看已标记图像的所有用户:
< Buff行情>>>> zope.component.provideAdapter(testing.SimpleKeyReference)4
或指定了特定标记的所有用户:
< Buff行情>>>> zope.component.provideAdapter(testing.SimpleKeyReference)5
使用命名标记引擎
< Buff行情>>>> zope.component.provideAdapter(testing.SimpleKeyReference)6
>>> zope.component.provideAdapter(testing.SimpleKeyReference)7
我们还没有注册命名标记引擎。让我们看看如果我们 使用空标记列表进行更新。
< Buff行情>>>> zope.component.provideAdapter(testing.SimpleKeyReference)8
如果我们在没有标记的情况下进行更新,可能是因为一个对象 已被删除。这通常在objectremovedevent的事件处理程序中完成。 如果我们在这种情况下提出一个例外,则无法删除站点。
现在我们注册一个命名标记引擎。
< Buff行情>>>> zope.component.provideAdapter(testing.SimpleKeyReference)9
>>> engine.update(1, u'srichter', [u'USA', u'personal']) >>> engine.update(2, u'srichter', [u'austria', u'lovely']) >>> engine.update(3, u'jodok', [u'Austria', u'personal']) >>> engine.update(2, u'jodok', [u'austria', u'lovely', u'work'])0
新标记不在未命名标记引擎中。
< Buff行情>>>> zope.component.provideAdapter(testing.SimpleKeyReference)2
iusertaging
还有一个用于itaggable对象的适配器,它提供了一个简单的 tag属性,接受为itaggable定义的标记列表 由现任校长负责。
< Buff行情>>>> engine.update(1, u'srichter', [u'USA', u'personal']) >>> engine.update(2, u'srichter', [u'austria', u'lovely']) >>> engine.update(3, u'jodok', [u'Austria', u'personal']) >>> engine.update(2, u'jodok', [u'austria', u'lovely', u'work'])2
我们得到一个值错误,因为我们在这个测试中没有交互作用,并且 因此,实现无法找到主体。我们必须 创建主体和参与。
< Buff行情>>>> engine.update(1, u'srichter', [u'USA', u'personal']) >>> engine.update(2, u'srichter', [u'austria', u'lovely']) >>> engine.update(3, u'jodok', [u'Austria', u'personal']) >>> engine.update(2, u'jodok', [u'austria', u'lovely', u'work'])3
标记云
像flickr、del.icio.us这样的所有门户都使用标记并生成标记云。 标记云包含标记及其频率。
getcloud方法以以下形式返回一组元组 ("标签",频率)。它采用与gettags相同的参数。
< Buff行情>>>> engine.update(1, u'srichter', [u'USA', u'personal']) >>> engine.update(2, u'srichter', [u'austria', u'lovely']) >>> engine.update(3, u'jodok', [u'Austria', u'personal']) >>> engine.update(2, u'jodok', [u'austria', u'lovely', u'work'])4
现在,让我们添加一些标记,以便稍后生成云:
< Buff行情>>>> engine.update(1, u'srichter', [u'USA', u'personal']) >>> engine.update(2, u'srichter', [u'austria', u'lovely']) >>> engine.update(3, u'jodok', [u'Austria', u'personal']) >>> engine.update(2, u'jodok', [u'austria', u'lovely', u'work'])5
最常见的用例是生成全局标记云。
< Buff行情>>>> engine.update(1, u'srichter', [u'USA', u'personal']) >>> engine.update(2, u'srichter', [u'austria', u'lovely']) >>> engine.update(3, u'jodok', [u'Austria', u'personal']) >>> engine.update(2, u'jodok', [u'austria', u'lovely', u'work'])6
当然,您可以根据项目生成云。你一个元组都过不去 项目,只允许一个:
< Buff行情>>>> engine.update(1, u'srichter', [u'USA', u'personal']) >>> engine.update(2, u'srichter', [u'austria', u'lovely']) >>> engine.update(3, u'jodok', [u'Austria', u'personal']) >>> engine.update(2, u'jodok', [u'austria', u'lovely', u'work'])7
这同样适用于用户查询:
< Buff行情>>>> engine.update(1, u'srichter', [u'USA', u'personal']) >>> engine.update(2, u'srichter', [u'austria', u'lovely']) >>> engine.update(3, u'jodok', [u'Austria', u'personal']) >>> engine.update(2, u'jodok', [u'austria', u'lovely', u'work'])8
或更多用户,以及一些项目。
< Buff行情>>>> engine.update(1, u'srichter', [u'USA', u'personal']) >>> engine.update(2, u'srichter', [u'austria', u'lovely']) >>> engine.update(3, u'jodok', [u'Austria', u'personal']) >>> engine.update(2, u'jodok', [u'austria', u'lovely', u'work'])9
重新更新同一用户的标签不会影响云重量
<块引用】>>>> sorted(engine.getTags(items=(1,))) [u'USA', u'personal']0
重新更新同一用户的标签不会影响云重量
< Buff行情>>>> sorted(engine.getTags(items=(1,))) [u'USA', u'personal']1
相关标签
标记引擎的一个高级功能是查找所有相关的标记 到给定的标记。
< Buff行情>>>> sorted(engine.getTags(items=(1,))) [u'USA', u'personal']2
默认情况下,该方法仅搜索与一级相关的标记。你可以 同时搜索其他学位:
< Buff行情>>>> sorted(engine.getTags(items=(1,))) [u'USA', u'personal']3
>>> sorted(engine.getTags(items=(1,))) [u'USA', u'personal']4
相关项目
另一个高级功能是提供相关项目。
我们为这次试验安装了一台新发动机。如果项目至少有 一个共同标签。
< Buff行情>>>> sorted(engine.getTags(items=(1,))) [u'USA', u'personal']5
我们得到的元组包含相关项和共同的标记数。
< Buff行情>>>> sorted(engine.getTags(items=(1,))) [u'USA', u'personal']6
相关用户
我们也可以找到相关用户。如果用户至少有一个标记,则与之相关 共同点。
< Buff行情>>>> sorted(engine.getTags(items=(1,))) [u'USA', u'personal']7
标签频率
如果我们有标签列表,我们可以询问标签的频率。
< Buff行情>>>> sorted(engine.getTags(items=(1,))) [u'USA', u'personal']8
如果我们要求的标签不在引擎中,则频率为0。
< Buff行情>>>> sorted(engine.getTags(items=(1,))) [u'USA', u'personal']9
删除标记对象
当一个对象从intids实用程序中注销时,它将是 从每台发动机上拆下。让我们看看到目前为止我们有多少东西。
< Buff行情>>>> type(engine.getTags()) <type 'set'>0
我们可以使用标记引擎的delete方法来删除标记 通过定义用户、项目或标记名来创建对象。
< Buff行情>>>> type(engine.getTags()) <type 'set'>1
如果我们删除某个用户的标记,其他用户的标记仍然存在。
< Buff行情>>>> type(engine.getTags()) <type 'set'>2
这也适用于物品。
< Buff行情>>>> type(engine.getTags()) <type 'set'>3
让我们将一个标签从项目添加到另一个项目以显示行为。
< Buff行情>>>> type(engine.getTags()) <type 'set'>4
"奥地利"标签仍在。
< Buff行情>>>> type(engine.getTags()) <type 'set'>5
让我们设置处理程序和事件。
< Buff行情>>>> type(engine.getTags()) <type 'set'>6
如果我们现在用图像对象触发intid remove事件,它应该 在两个发动机中都拆下。
< Buff行情>>>> type(engine.getTags()) <type 'set'>7
删除过期项
您可以从标记引擎中删除过时的项。陈腐的意思是 Intids实用程序不再提供该项目。
因为我们之前移除了任何带有intid的对象,所以我们有一个空的 IntID实用程序。
< Buff行情>>>> type(engine.getTags()) <type 'set'>8
但在上面我们定义了一个id不存在的项。所以这个 是过时的项目。
< Buff行情>>>> type(engine.getTags()) <type 'set'>9
让我们再次添加图像对象。
< Buff行情>>>> sorted(engine.getTags(items=(1, 2))) [u'USA', u'austria', u'lovely', u'personal', u'work']0
这是intid util中的第一个也是唯一一个条目
< Buff行情>>>> sorted(engine.getTags(items=(1, 2))) [u'USA', u'austria', u'lovely', u'personal', u'work']1
我们的旧条目是2。将返回已删除项目的IntID。
< Buff行情>>>> sorted(engine.getTags(items=(1, 2))) [u'USA', u'austria', u'lovely', u'personal', u'work']2
我们现在只有真正的图像项目。
< Buff行情>>>> sorted(engine.getTags(items=(1, 2))) [u'USA', u'austria', u'lovely', u'personal', u'work']3
重命名标记
也可以在引擎中全局重命名标记。
< Buff行情>>>> sorted(engine.getTags(items=(1, 2))) [u'USA', u'austria', u'lovely', u'personal', u'work']4
rename方法返回重命名的标记对象的数目。
< Buff行情>>>> sorted(engine.getTags(items=(1, 2))) [u'USA', u'austria', u'lovely', u'personal', u'work']5
如果新名称已存在,则会加入标记。
< Buff行情>>>> sorted(engine.getTags(items=(1, 2))) [u'USA', u'austria', u'lovely', u'personal', u'work']6
规范化标记
也可以使用可调用的ojbect规范化标记,该ojbect 返回任何给定名称的新名称。 小写。
< Buff行情>>>> sorted(engine.getTags(items=(1, 2))) [u'USA', u'austria', u'lovely', u'personal', u'work']7
让我们使用lower函数将所有标记规范化为小写 从字符串模块。
< Buff行情>>>> sorted(engine.getTags(items=(1, 2))) [u'USA', u'austria', u'lovely', u'personal', u'work']8
normalize方法返回受影响的标记对象的数量。
< Buff行情>>>> sorted(engine.getTags(items=(1, 2))) [u'USA', u'austria', u'lovely', u'personal', u'work']9
标准化会议hod还接受一个python点式名称,它将 已解析为全局对象。
< Buff行情>>>> sorted(engine.getTags(users=(u'srichter',))) [u'USA', u'austria', u'lovely', u'personal']0