Flutter功能未知插件fmatch的潜在使用
Flutter功能未知插件fmatch的潜在使用
描述
FMatch 是一个模糊文本匹配引擎,用于实体筛查或人员筛查,例如与BIS实体名单进行对比。
实际上,这只是一个文本匹配引擎,而不是针对拒绝名单的筛查系统。你可能需要将结果与拒绝名单结合起来以实现实际应用。 这是一个具有本地Web API或Dart API的子系统。
特性
- 使用Levenshtein距离进行模糊术语匹配。
- 将查询项分段并与单个列表项进行匹配。
- 模糊查询匹配考虑术语相似性、术语顺序和术语重要性(IDF)。
- 完美匹配模式禁用模糊匹配,以减少某些情况下的误报。
- 支持拉丁字符、汉字、片假名字符等。
- 对传统和简化汉字进行规范化,使匹配不受字符简化的影响。
- 规范化法律实体类型的拼写变体,如“Limitd”和“Ltd.”,使匹配不受拼写变体的影响。
- 白名单查询避免筛查自己的公司并减少误报。
- 结果缓存提高时间性能。
- Web服务器接受单独查询以供交互式UI使用。
- Web服务器接受并并行处理批量查询以供批处理应用使用。
- 提供文本规范化API以供外部较大系统加入拒绝名单的结果。
- 其他功能。
使用方法
获取公共拒绝名单(可选)
dart bin/fetch_public_lists.dart
这将从美国政府的综合筛选名单(https://www.trade.gov/consolidated-screening-list)和日本经济产业省外国用户名单(https://www.meti.go.jp/policy/anpo/law05.html#user-list)获取名单。
编译本地Web服务器
dart compile exe -v bin/wserver.dart -o bin/wserver
注意:JIT模式由于某些原因无法工作。参见 dart-lang/sdk#50082。
启动本地Web服务器
bin/wserver
发送查询并接收结果
$ http -b --unsorted ':4049?q=abc'
{
"serverId": 2,
"start": "2022-11-10T12:21:22.736901Z",
"durationInMilliseconds": 16,
"inputString": "abc",
"rawQuery": "ABC",
"cachedResult": {
"cachedQuery": {
"letType": "na",
"terms": [
"ABC"
],
"perfectMatching": false
},
"queryScore": 0.8325604366063432,
"queryFallenBack": false,
"matchedEntiries": [
{
"entry": "ABC LLC",
"score": 0.8325604366063432
},
{
"entry": "ABMC THAI SOUTH SUDAN CONSTRUCTION",
"score": 0.6244203274547574
},
{
"entry": "ABMC THAI-SOUTH SUDAN CONSTRUCTION COMPANY LIMITED",
"score": 0.6244203274547574
}
]
},
"message": ""
}
请记住对查询进行百分比编码。
完美匹配
将整个查询用双引号括起来:
$ http -b --unsorted ':4049?q="abc"'
{
"serverId": 1,
"start": "2022-11-11T00:39:16.506794Z",
"durationInMilliseconds": 2,
"inputString": "\"abc\"",
"rawQuery": "ABC",
"cachedResult": {
"cachedQuery": {
"letType": "na",
"terms": [
"ABC"
],
"perfectMatching": true
},
"queryScore": 1.0,
"queryFallenBack": false,
"matchedEntiries": [
{
"entry": "ABC LLC",
"score": 1.0
}
]
},
"message": "Cached result"
}
通过JSON发送查询并接收结果
$ http -b --unsorted :4049 'Content-type:application/json; charset=utf-8' '[]=abc' '[]="def"'
[
{
"serverId": 2,
"start": "2022-11-11T00:40:34.971122Z",
"durationInMilliseconds": 2,
"inputString": "abc",
"rawQuery": "ABC",
"cachedResult": {
"cachedQuery": {
"letType": "na",
"terms": [
"ABC"
],
"perfectMatching": false
},
"queryScore": 0.8325604366063432,
"queryFallenBack": false,
"matchedEntiries": [
{
"entry": "ABC LLC",
"score": 0.8325604366063432
},
{
"entry": "ABMC THAI SOUTH SUDAN CONSTRUCTION",
"score": 0.6244203274547574
},
{
"entry": "ABMC THAI-SOUTH SUDAN CONSTRUCTION COMPANY LIMITED",
"score": 0.6244203274547574
}
]
},
"message": "Cached result"
},
{
"serverId": 0,
"start": "2022-11-11T00:40:34.970496Z",
"durationInMilliseconds": 2,
"inputString": "\"def\"",
"rawQuery": "DEF",
"cachedResult": {
"cachedQuery": {
"letType": "na",
"terms": [
"DEF"
],
"perfectMatching": true
},
"queryScore": 1.0,
"queryFallenBack": false,
"matchedEntiries": [
{
"entry": "SAZEMANE SANAYE DEF",
"score": 1.0
}
]
},
"message": ""
}
]
运行示例批量处理
$ ls batch
queries.csv
$ dart bin/batchwb.dart -i batch/queries.csv
...
$ ls batch
queries.csv
queries_results.csv
刷新服务器
http :4049/restart
这将使服务器重新加载数据库,重新读取配置和设置,并清除结果缓存。 当拒绝名单更新或配置/设置修改时,这非常有用。
获取规范化文本作为与拒绝名单结合的键
$ http -b ':4049/normalize?q=abc'
"ABC"
这对于准备外部分析系统加入拒绝名单的结果非常有用。
注意,此子系统的输出结果也进行了相同的规范化处理。
许可证
在AGPL-3.0或更高版本下发布。参见 LICENSE 文件。
如果你需要其他不同的许可证,请联系我。
示例代码
import 'dart:convert';
import 'package:fmatch/fmatch.dart';
Future<void> main(List<String> args) async {
print('Start Batch');
var matcher = FMatcher();
await matcher.init();
var result = await matcher.fmatch('abc');
final resultJsonObject = result.toJson();
final jsonEncorder = JsonEncoder.withIndent(' ');
final resultJsonString = jsonEncorder.convert(resultJsonObject);
print(resultJsonString);
}
更多关于Flutter功能未知插件fmatch的潜在使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
1 回复