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 tag
0

最后,您还可以指定两者的组合:

< Buff行情>
>>> from lovely import tag
1

您也可以通过不指定项目或用户来查询所有标记:

< Buff行情>
>>> from lovely import tag
2

查询项目

此方法允许查找项。例如,我们想找到 带有"个人"标签的项目:

< Buff行情>
>>> from lovely import tag
3

注意:查询方法返回集合。

< Buff行情>
>>> from lovely import tag
4

此外,您还可以查询特定用户的所有项目:

< Buff行情>
>>> from lovely import tag
5

最后,您可以结合标签和用户规范:

< Buff行情>
>>> from lovely import tag
6

您也可以通过不指定标记或用户来查询所有项目:

< Buff行情>
>>> from lovely import tag
7

查询用户

与上述两种方法类似,您可以查询用户。首先我们是 查找指定特定标记的所有用户。

< Buff行情>
>>> from lovely import tag
8

注意:查询方法返回集合。

< Buff行情>
>>> from lovely import tag
9

接下来,您还可以找到用户标记的所有项目:

< 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 testing
0

您还可以将这三项视为 标签。除了这三个属性之外,创建日期也是 指定:

< Buff行情>
>>> import zope.component
>>> from zope.app.keyreference import testing
1

可标记对象

理论上所有对象都是可标记的。但这可能并不可取。因此 对象必须提供可标记的 itaggable 接口。

< Buff行情>
>>> import zope.component
>>> from zope.app.keyreference import testing
2
>>> import zope.component
>>> from zope.app.keyreference import testing
3
>>> import zope.component
>>> from zope.app.keyreference import testing
4

然后,可标记对象可以适应 itagging 接口。为此 要工作,我们必须注册适配器:

< Buff行情>
>>> import zope.component
>>> from zope.app.keyreference import testing
5

在我们现在可以使用标记对象之前,我们需要注册我们的标记 引擎以及作为实用程序的整数ID生成器:

< Buff行情>
>>> import zope.component
>>> from zope.app.keyreference import testing
6
>>> import zope.component
>>> from zope.app.keyreference import testing
7

修改要标记的文件应失败:

< Buff行情>
>>> import zope.component
>>> from zope.app.keyreference import testing
8

但图像可以被标记:

< Buff行情>
>>> import zope.component
>>> from zope.app.keyreference import testing
9

起初,图像没有标记:

< 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

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

推荐PyPI第三方库


热门话题
java Android同步不同页面上的按钮   java评测每个类收集的垃圾对象实例数   java(Spring MVC+Hibernate 4+Test 4)自动连线DAO返回NULL   java Android编辑文本和虚拟键盘   java Selenium与BrowserMobProxy   JAVAlang.NoClassDefFoundError:com/sun/jersey/spi/inject/Errors$关闭原因?   java为什么在我成功登录后仍然会出现“不正确的帐户或密码或用户类型”   安卓应用程序在重新启动java时崩溃。网UnknownHostException:无法解析主机   多线程在Java中同步共享静态对象的正确方法是什么?   未调用自定义注释的java类验证(约束类)   java如何将指定目录的存档文件放入所需位置?   java如何识别Selenium中的每个编辑文本字段,如果它们的Xpath都相同   使用gwtmockito/mockito的java简单单选按钮单元测试?