我在这里使用的“文档”一词是指“Lucene 文档”或 LDoc,即放入索引、分析等的内容。
我正在解析目录树中的整个 .docx 和 .docm 文本文件,然后对其进行索引。为此,我将它们分成 10 个段落的块(重叠)。每个 10 段块构成一个 LDoc。我正在使用 _bulk 端点创建索引。
这里有很多非英语文本。在稍后的阶段,我将尝试使用语言分析器模块来尝试使用拉丁字母来识别非英语语言。目前我正在摸索如何处理 LDocs,其中要输入的字符串包含希腊字母。
这样的 LDoc 文本如下:
"After the loyal things happened pledge was taken, said Klearkhos" As
soon as the pledge was taken, Clearchus spoke:
--ἄγε δή, ὦ Ἀριαῖε, ἐπείπερ ὁ αὐτὸς ὑμῖν στόλος ἐστὶ καὶ ἡμῖν, εἰπὲ τίνα
γνώμην ἔχεις περὶ τῆς πορείας, πότερον ἄπιμεν ἥνπερ ἤλθομεν ἢ ἄλλην τινὰ
ἐννενοηκέναι δοκεῖς ὁδὸν κρείττω. ἄγω ἄγε: 2s pres. act. imperative "command!"
ἄγε interjection: come on; let's go; ἄγε δή: "so" {seemingly} ἐπείπερ conj.:
"seeing that" στόλος: expedition; army; fleet; troop γνώμη: sign; mark; mind;
intelligence; judgment; understanding; will; opinion ἔχεις: 2s pai περὶ prep.:
(+gen.) about; concerning; because of
检查从字段的(英语)词干版本上的(英语)词干分析器查询返回的结果,我发现这是针对“Klearkhos”的搜索返回的:
loyal things happened pledge was taken, said <span style=\"background-color:
yellow\">Klearkhos</span>\"\nAs soon as the pledge was taken, Clearchus spoke:
(注意,我使用的是荧光笔,因此跨度)
起初我认为词干分析器在遇到非拉丁文本时可能只是挂断电话并认为 LDoc 文本的其余部分不值得打扰。 (注意,我不清楚为什么开头 |“在|之后,没有被包括在内......)。
实际上事实证明它并没有这样做。搜索“情报判断探险队”返回的结果包括:
that expedition; army; fleet; troop: sign; mark; mind; intelligence; judgment;
understanding;
(省略突出显示标签...)
事实上,词干分析器功能似乎将提交的文本划分为许多不同的、非常小的 LDoc。这可能不是处理这些 LDoc 文本的理想方式。
我认为最好的办法可能是去掉希腊文字,只保留剩下的英语。但无论如何,我希望
_source
字段包含整个文本。
我可以通过检测非拉丁字符来删除(Rust)模块中的希腊文本。但是,我如何告诉 ES 服务器出于词干提取的目的,使用与为“完整文本”提交的文本不同的文本?
PS 当然,我会考虑使用希腊语词干分析器去除给定 LDoc 中的所有英语并词干所有希腊语文本...
我现在假设在 ES 中没有公认的方法来做到这一点......所以我计划有 3 个字段:
...然后 1) 将不进行分析但存储(并显示为结果),2) 将使用英语词干分析器进行词干分析,3) 将使用希腊语分析器进行词干分析
还可以使用 unicode_normalization 进行标准化以删除 2) 和 3) 的重音符号。
这留下了一个技术问题:未分析的源文本将无法突出显示......但可能有一种解决方法,即返回词干版本并将其分开。