IBM®
跳转到主要内容
    中国 [选择]    使用条款
 
 
Select a scope: Search for:    
    首页    产品    服务与解决方案     支持与下载    个性化服务    
跳转到主要内容

developerWorks 中国  >  Lotus  >

Lotus Symphony 文本内容识别(Live Text)功能介绍及应用

developerWorks
文档选项

未显示需要 JavaScript 的文档选项

样例代码


级别: 初级

王 卫华, 软件工程师, IBM 中国软件开发中心

2009 年 9 月 11 日

本文讲述了 Lotus Symphony 中 Live Text 的新特性,通过安装内容识别相关的小组件(widget)或 Eclipse 插件(plugin)使文档自动识别符合该类别内容的单词或短语,并以下划线的方式标识出来,从而使用户触发相应动作。Live Text 在文档编辑及查看的过程中显得尤为重要,它不仅帮助用户定位相关的内容信息还可以方便用户利用现有资源查阅相关信息,文档显示更加生动。

Lotus Symphony Live Text 概述

Lotus Symphony 是 IBM 推出的一套基于开放文档格式(ODF)的免费办公软件,不仅可以编辑和查看文本(.odt),演示文稿(.odp)和表格(.ods)三种格式的文档,同时对 MicroSoft Office,Lotus SmartSuit 等格式的文档具有良好的互操作性和兼容性。Lotus Symphony 的可编程性使得它在办公软件领域受到青睐,开发人员可以通过 Eclipse 的插件开发方式来扩展产品的功能。

本文介绍的 Live Text 便对上述 Lotus Symphony 两大特性进行了诠释。Live Text 解决了用户在进行复杂的文本操作时,通过安装相关插件或 widget 就可以方便的找到自己关心的文本内容,因为 Symphony highlight 了这些内容,用户甚至可以通过简单的鼠标操作来触发对这些文本内容的查阅。同时具有开发经验的用户可以开发 Eclipse 插件或 widget 来轻松扩展 Live Text 的功能,使得文档显示更加丰富。

图 1 是 Live Text 在示例文档中的应用。我们可以看到有三个单词被标识出来,触发其中一个单词旁边的图标可以显示针对当前单词的可用操作。这些操作将在后面的章节中详细介绍。


图 1. Lotus Symphony Live Text 示例文档(查看大图
图 1. Lotus Symphony Live Text 示例文档




回页首


Live Text 技术简介

Lotus Symphony 针对 Live Text 功能提供了两种扩展方式,一种是基于 My Widget 这一 Lotus Notes 8.0.1 的新特性,使得通过 Lotus Expeditor 中 contentType 扩展点实现的 Live Text 可以有效利用现有的服务和资源,如网站,Notes 数据库,Google search 等。由于 Symphony 架构是基于 Lotus Expeditor 平台, Symphony 可以很容易的利用 iWidget 来触发 Live Text 功能;另一种方式是开发基于 Auto Recognizer 这一扩展点的 Eclipse 插件。下面我们来分别介绍这两种方式:

基于 My Widget 的 Live Text 功能介绍

这里我们按次序逐一讲解激活基于 My Widget 的 Live Text 功能的各个步骤及每一步涉及的知识要点。

1. 打开 My Widget 侧边栏

启动 Symphony V1.3,通过配置首选项(File > Preferences …)显示 My Widget 侧边栏。


图 2. Widgets 首选项设置
图 2. Widgets 首选项设置

图 2 显示的 Widgets 首选项中默认配置了 widget 的目录服务器。选中图中的 checkbox 并点击 OK 按钮后,My Widget 面板会默认出现在 Symphony 侧边栏中,我们可以在 My Widget 侧边栏中通过 Catalog > Show… 导航到首选项中配置的 widget 目录服务器来查看当前可用的 widget,也可以点击 Import… 选项导入本地已有的 widget


图 3. Widget 侧边栏菜单选项
图 3. Widget 侧边栏菜单选项

当然也可以创建自定义的 widget 来扩展 Live Text 功能,这里不对如何创建 widget 进行阐述,请参见本文的参考资料获取相关的帮助信息。

注意:并不是所有的 widget 目录服务器上的 widget 都可以触发 Live Text 的功能,只有实现了 Expeditor 中 ContentType 相关扩展点的 widget 才可以识别 Live Text。

本文将以 Personwidget 作为示例来讲解 Live Text 的功能。该 widget 使得 Live Text 可以利用 IBM BluePage 上的资源来识别 Symphony 文档中相关的文本内容,如人名,Notes ID 和电话等。

在 IBM 网站内部的 widget 目录服务器中可以找到该 widget,也可以直接下载参考资料中的 xml 文件,将其拖入到 My Widget 侧边栏中即可。这样文档就有了识别 BluePage 中内容的功能。但这时我们还要确保 Symphony 首选项中激活了文档的 Live Text 功能。

2. Live Text 首选项配置

用户可以在 File > Preference… > IBM Lotus Symphony > Lotus Symphony Documents > Live Text中找到 Live Text 的首选项配置


图 4. Live Text 首选项配置
图 4. Live Text 首选项配置

在该面板上我们可以配置整个 Symphony 应用程序是否激活 Live Text 功能,以及 Hightlight Live Text 的方式,如下划线的风格和颜色,如果 Symphony 当前导入了若干实现了 Content Type 扩展点的 widget,则用户可以选择性的激活或撤销某个 widget 的内容识别。图 4 表明当前 Symphony 导入了两个 widget,一个是本文讲解的 PersonWidget,另外一个是 SPRWidget,它可以利用 Notes SPR 数据库查询 SPR number 相关信息。

3. Live Text 文档显示

打开一篇文档,被激活的 widget 所识别的文档内容便会以首选项中配置的风格来显示文本。如图 1 所示。用户可以移动鼠标到关心的文本区域,这时会显示一个蓝色的下拉图标,Hover 在该图标上会显示提示文本,内容为 Click For Live Text Actions.提示用户点击该图标,从而打开文本内容识别的菜单项,包括

  • 识别该文本内容 widget 的特定 action。该菜单项位于菜单分界符以上。Person widget 的 action 叫做 BluePage | search by Names,触发该 action 就可以打开 Symphony 中内嵌的 web 浏览器从而在 bluepage 中搜索该文本。



    图 5. 触发 Live Text action(查看大图
    图 5. 触发 Live Text action

    如果该文本被多个 widget 所识别,那么会显示所有针对这些 widget 的 action 菜单项。

  • Live Text 通用菜单项。该菜单项位于分界符以下,用于设置 Live Text 的识别范围,包括以下几项:
    • Hide Recognize Mark

      触发该菜单项使得所有打开的文档隐藏当前单词的识别。

    • Recognize Live Text in this Document

      Disable 这一菜单项则使当前文档撤销 Live Text 的功能,其他打开的文档则没有变化。而主菜单中 Tools > Recognize Live Text in this Document 则可以再次激活 / 撤销当前文档的 Live Text 功能。

基于 Auto Recognizer 扩展点的 Live Text 功能介绍

基于 Auto Recognizer 扩展点的 Live Text 无论在触发方式还是在识别的内容上都与基于 My Widget 的方式不同。

Auto Recognizer 组件 com.ibm.rcp.autorecognizer 为 Symphony 的 Live Text 功能提供了一个名为“Recognizer”的扩展点,它支持三种类型的文本识别。

  • 符合指定 Pattern 的字符串

    用户通过配置文本识别类型 pattern-based,并设置所需的正则表达式,如 pattern=“^IBM”,则文档中符合该正则表达式,即以 IBM 开头的单词就会被识别出来。

  • 指定可识别文本单词的集合

    用户配置文本识别类型 item-list,并给定一个单词的集合,则文档里存在在该集合中的单词就会被识别出来。

  • 实现 com.ibm.rcp.autorecognizer.recognizer.IDetect接口的自定义类。

    用户配置文本识别类型 define-method,通过实现 IDetect接口来添加自己的内容识别引擎。下面列出了 IDetect接口的代码



    清单 1. IDetect 接口定义
    						
    public interface IDetect{ 
        public List<DetectResult> detect(String buffer); 
    } 
    

    参数 buffer表示需要被识别的字符串,DetectResult表示识别内容的返回结果,它指明了识别出的文本在参数 buffer中的起始位置,长度以及具体的内容。buffer中可能存在多段可识别的文本,所以是以数组的方式返回结果。

由此可见,基于 Auto Recognizer 扩展点的插件所识别的内容完全不依赖与 My Widget 的配置。而且触发方式依赖于 Eclipse 插件的实现方式,如在 Symphony 的主菜单中增加菜单项来触发等。

接下来的章节会为用户详细介绍如何创建一个简单的 Eclipse 插件来扩展 Live Text 的功能。





回页首


编写简单的基于 Auto Recognizer 的 Live Text 扩展插件

该插件是通过编写实现 IDetect 接口的自定义类,从而实现识别给定的文本单词集合的 Live Text 功能。即用上面提到的 define-method 文本识别方法来实现 item-list的文本识别类型。清单 2 给出了 Recognizer 扩展点的实例,实现该实例的类叫做 SampleDetector,清单 3 列出了该类的具体实现。


清单 2. define-method 方式的 Auto Recognizer 扩展
				
<extension point="com.ibm.rcp.autorecognizer.Recognizer"> 
     <types> 
         <define-methodid="SampleRecognizer"> 
           <type 
                  datatype="SampleType"
                  default-name="SampleType"
                  multi-segment="true"
                  namespace="http://www.ibm.com/wps/c2a"/> 
           <custom class="com.ibm.productivity.tools.samples.C2A. 
 recognizer.SampleDetector"/> 
        </define-method> 
     </types> 
</extension> 


清单 3. IDetect 接口实现 item-list 内容识别
				
 public class SampleDetector implements IDetect { 

 private String m_Itemlist[] = {"PropertyBroker","AutoRecognizer" }; 
 public static ArrayList taglist= new ArrayList(); 

 /* (non-Javadoc) 
	 * @see com.ibm.rcp.autorecognizer.recognizer.IDetect#detect(java.lang.String) 
 */ 
 public List detect(String text) { 
	 if (text == null || "".endsWith(text)) 
	        return new ArrayList(); 
            List list = new ArrayList(); 
            for (int i = 0; i < m_Itemlist.length; i++) { 
		 String item = m_Itemlist[i]; 
		 int itemLength = item.length(); 
		 int start = 0; 
		 int index = 0; 
		 index = text.indexOf(item, start); 
		 while (index != -1) { 
			 DetectResult rlt = new DetectResult(); 
			 rlt.start = index; 
			 rlt.offset = itemLength; 
			 rlt.value = item; 
			 list.add(rlt); 
			 start = index + 1; 
			 index = text.indexOf(item, start); 
		 } 

	 } 
	 return list; 
 } 
 } 

SampleDetector 的实现可以看出,该类可以识别单词集合 { PropertyBroker,AutoRecognizer } 中的单词,这个实例中我们采用 createPartControl 的方式通过添加菜单项 MySample > C2A Sample 在 Symphony 中打开一个名为“C2A Example.odt”的文档,这时我们可以看到这些单词集合中的单词按照 Live Text 首选项中的配置显示在文档中。


图 6. 基于 AutoRecognizer 方式的 Live Text 实例
图 6. 基于 AutoRecognizer 方式的 Live Text 实例

从参考资料中提到的 Symphony Developer Toolkit 的 sample 中可以找到本文提到的具体插件代码,图 7 显示了 sample updatesite 在 Toolkit 中的具体路径,用户通过安装该 updatesite 就完成了对本实例的安装。


图 7. Sample updatesite 路径示意图
图 7. Sample updatesite 路径示意图




回页首


Live Text 的新特性

Symphony1.1 中就有 Live Text 的雏形,当时只是支持 Auto Recognizer 扩展方式,但在 Symphony 以后的版本中 Live Text 的功能逐步完善。下面我们来比较一下 Symphony 的各个版本对 Live Text 的支持程度。


表 1. Live Text 在 Lotus Symphony 各个版本中的功能对比
 Symphony v1.1 Symphony v1.2 Symphony V1.3
Symphony Standalone 于 Auto Recognizer 扩展点于 Auto Recognizer 扩展点基于 My Widget 方式及
基于 Auto Recognizer 扩展点
Embedded in Notes N/A 基于 My Widget 方式基于 My Widget 方式

除此之外 Symphony V1.3 做到了对 Lotus Notes 8.5 的 UI 一致性,包括 Live Text tooltip,icon 以及首选项配置页的改变,同时添加菜单项 Tools > Recognize Live Text in this Document来支持文档粒度的 Live Text,缩小了文本内容识别的范围,而不再将 Live Text 局限于整个 Symphony 应用程序的激活 / 撤销。





回页首


与 Lotus Notes Live Text 功能的比较

虽然 Symphony 的 Live Text 功能与 Notes 逐渐走向一致,但前者较后者还存在一些非常吸引人的特性,并且在内容识别的效率上有所提高

  • 编辑过程中自动识别 Live Text。

    Symphony 不仅是文档查看器,而且是文档编辑器,所以在编辑文档过程中即时显示 Live Text 成为该功能的一大亮点。当用户输入空格,tab 或回车时就会触发后台的 Live Text 识别,而 Notes 在编辑 Message 的过程中是不支持 Live Text 识别的。

  • 支持更小粒度的文本识别范围

    Symphony 可以撤销某一单词在整个应用中的识别。如文档中列出了一些 defect number,用户可以定制 widget 组件,实现在现有的 defect DB 中查找这些 defect number 并以 Live Text 的方式显示在文档中,用户可能只关心那些处于 OPEN 状态的 defect,那么我们可以通过撤销识别那些 RESOLVED 状态的 defect number,即通过手动触发上文中提到的 Hide Recognize Mark菜单项 使得用户更加清晰的看到有待解决的 defect。

  • 首选项中下划线风格和颜色面板更加丰富
  • 提供了 Auto Recognizer 方式扩展 Live Text 的功能,而 Lotus Notes 则不支持该扩展方式。




回页首


结束语

本文讲述了 Lotus Symphony Live Text 的用途,扩展方式及新特性,使得用户更加灵活的使用 Live Text 功能,同时利用 Lotus Symphony V1.3 支持 My Widget 这一特性使得 Live Text 能够有效利用现有资源,从而为用户在查看和编辑文档时提供方便。






回页首


下载

描述名字大小下载方法
Person Widget 代码BluePageSearchNameL.zip2 KBHTTP
关于下载方法的信息


参考资料

学习

获得产品和技术


关于作者

王卫华,主要承担 Lotus Symphony 中 ODF filter 方面的开发工作,并增强了 Lotus Symphony 1.3 中的 Live Text 功能,现在负责 ODF Toolkit 相关 Open Source 项目的开发。




对本文的评价








IBM 公司保留在 developerWorks 网站上发表的内容的著作权。未经IBM公司或原始作者的书面明确许可,请勿转载。如果您希望转载,请通过 提交转载请求表单 联系我们的编辑团队。
    关于 IBM 隐私条约 联系 IBM 使用条款