
# 自定义Tokenweight分词词典
Tokenweight词典主要用于中文分词，支持根据词权重，进行基于隐马尔可夫模型分布算法的段落分词。GaussDB中预定义默认中文分词词典，可通过系统表PG_TS_DICT（详细请参见《参考》中"系统表和系统视图 \> 系统表 \> 其他系统表 \> PG_TS_DICT"章节）查看。Tokenweight词典为相似文档召回检索的BM25索引提供分词功能，加强中文相关文档检索的准确性。用户可根据业务需求自定义词典关键词权重，并在建立BM25索引时通过tokenize_dict参数指定词典名使索引按照自定义词典进行文档关键词切分。
Tokenweight词典支持定义关键词、同义词和停用词。其中关键词用于提升文本分词质量进而提高相似文档检索的准确性。同义词用于扩展查询语句涉及文档范围，提高检索的召回率。停用词用于过滤查询语句中无意义的词，加速检索时延。用户可以通过[BM25索引](https://support.huaweicloud.com/centralized-vector-devg-v10-gaussdb/gaussdb-80-0029.html)，建索引语法指定该索引使用的词典，不指定则会设置为系统默认词典，其中配置了常见中文词汇和标准中英文停用词集。
#### 注意事项
- 具有SYSADMIN权限的用户可以执行创建词典操作，创建该词典的用户自动成为其所有者。
- 临时模式（pg_temp）下不允许创建词典。
- 创建或修改词典之后，任何对于用户自定义的词典定义文件的修改，将不会影响到数据库中的词典。如果需要在数据库中使用这些修改，需使用ALTER语句更新对应词典的定义文件。
- 用户自定义词典不支持通过gs_dump/gs_dumpall工具进行导入导出，需要用户重新手动创建词典。
- 全文检索词典相关语法操作受GUC参数tsearch_options限制。
 
#### 语法格式
```
CREATE TEXT SEARCH DICTIONARY name (
    TEMPLATE = template
    [, { option = value } [, ... ]]
);
```
![](https://support.huaweicloud.com/centralized-vector-devg-v10-gaussdb/figure/zh-cn_image_0000002677671543.png "点击放大")
#### 参数说明
- **name**
  要创建的词典的名称（可指定模式名，否则在当前模式下创建）。
  取值范围：符合[标识符命名规范]的字符串，且最大长度不超过63个字符。
  
- **template**
  模板名。
  取值范围：系统表PG_TS_TEMPLATE（详细信息请参见《参考》中"系统表和系统视图 \> 系统表 \> 其他系统表 \> PG_TS_TEMPLATE"章节）中定义的模板，本特性只涉及模板Tokenweight。
  
- **option**
  参数名。模板Tokenweight对应参数及说明如下。
  **Tokenweight词典**
  - USEDEFAULT 参数数值类型为布尔值，创建词典时是否使用BM25系统默认词典内容作为词典数据。设置为true时词典创建后将会自动导入系统默认设置常见的中文单词和停用词，为false时则内容为空。如果手动指定文件则该参数会被忽略，但不建议通过文件创建词典，推荐词典创建流程为创建词典，随后增量添加自定义的词典内容。
    
  
  - TOKENFILE
    词权重文件名，默认后缀名为tokw。文件格式为词权重和同义词相似度列表，每行可以表示词权重或者同义词相似度，词典处理时，文件中空行或者开头为"#"的注释以及每行开头和结尾的空格会被忽略。
    - 词权重格式为token word \[ : token weight \]。token weight可以为小数或者整数，默认值为3，中间":"作为分隔符，词权重越高分词时越容易将该字符串分成一个词。
    
    - 同义词支持两种格式：
      1. 多同义词：token word 1 :: token word 2 \[ :: token word 3 \[...\]\]。表示所有token words均互为同义词，相似度配置为0.8，过多的同义词组设置可能会造成包含同义词成员的BM25检索时延的增长。
      
      2. 单向同义词：token word 1 -\> token word 2 \[ : similarity\]。表示token word 2是token word 1的同义词，similarity可以为0-1之间的数值表示其相似度，默认值为0.8。注意该定义中同义词相似度只表示单向同义，A为B的同义词不代表B为A的同义词。
       
     
  
  - STOPFILE 停用词表文件名，默认后缀名为stop，文件格式要求与Simple类型词典的停用词文件相同。
    
  
  
  
  - FILEPATH 词典定义文件所在目录。可以指定为本地目录，格式为file://absolute_path。默认值为预定义词典文件所在目录。FILEPATH参数必须和STOPFILE或者TOKENFILE参数同时指定，不允许单独指定。
    
   
  ![](https://support.huaweicloud.com/centralized-vector-devg-v10-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
  词典定义文件的文件名仅支持小写字母、数据、下划线混合。
  
 
#### 增量添加词典内容
使用函数gs_ts_dict_add_definition(regdictionary, "char", text\[\])可以增量添加词典内容。
- 第一个参数为词典OID，可以直接输入词典名字符串由数据库内部做自动转换。
- 第二个参数表示该次增量词典内容添加的内容类型，'t'表示关键词或者同义词，'s'表示停用词。
- 第三个参数是添加的词典内容，类型为文本数组，数组中每条数据应单独表示一条词典内容定义，定义格式请参见[TOKENFILE]。
  ![](https://support.huaweicloud.com/centralized-vector-devg-v10-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
  该函数效果等同于DDL语句，运行后会清空所有数据库连接的词典缓存，重新加载词典时会造成BM25文本索引增删查操作大幅度变慢，不建议在线使用。
  
 
 #### 标识符命名规范
标识符的命名需要遵守如下规范：
- 标识符需要为字母（a-z）、下划线（_）、数字（0-9）或美元符号（$）。
- 标识符必须以字母（a-z）或下划线（_）开头。
  ![](https://support.huaweicloud.com/centralized-vector-devg-v10-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
  - 此命名规范为建议项，非强制项。
  
  - 特殊情况下可以使用双引号规避特殊字符报错。
    
 
