java - 是否可以在 C# 或 JAVA 中开发一些基于字符串的搜索条件?

标签 java string c#-4.0 replace

我在 C# 中有一个列表。这个字符串数组包含从 Ms-Word 文件中读取的段落元素。例如,

list 0-> 上图显示了将用于本章中许多标记示例的主要报表。此示例文档中有几个有趣的元素。首先是基本的文本元素,它们是文档的主要构建 block 。接下来是报告底部的表格,将对其进行全面讨论,包括方便的样式效果,如行带。最后,将添加标题中显示的图像以完成报告。

列表 1->上图显示了将用于本章中许多标记示例的主要报表。此示例文档中有几个有趣的元素。首先是基本的文本元素,它们是文档的主要构建 block 。还将处理 WordprocessingML 的各种其他元素。通过将格式化信息移动到样式中,可以实现更高程度的重用。该文档将使用自定义 XML 标记进行标记,并讨论插入其他高级元素(例如目录)。但在添加所有高级功能之前,需要构建文档的基础。

类似的东西。

现在我的搜索字符串是:

上图显示了将用于本章中许多标记示例的主要报表。此示例文档中有几个有趣的元素。首先是基本的文本元素,它们是文档的主要构建 block 。接下来是报告底部的表格,将对其进行全面讨论,包括方便的样式效果,如行带。在查看构成示例文档的所有元素之前,需要布置一个基本的文档结构。当您使用 WordprocessingML 文档并使用 Windows 资源管理器外壳将 docx 扩展名重命名为 zip 时,您会发现许多不同的元素,尤其是在较大的文档中。

我想用那个列表元素检查我的搜索字符串。

我的标准是“如果每个列表元素包含搜索字符串的 85% 匹配或完全匹配,那么我们要检索该列表元素。

在我们的例子中,

list 0 -> more 满足我的搜索字符串。 列表 1 - 它也匹配一些文本,但我认为下面不符合我的标准...

我如何在 String... 上进行这种基于条件的搜索?

我对我的问题也有更多的困惑

欢迎提出您的想法和想法...

最佳答案

关键字是DISTANCE“string distance”。还有,“段落相似度
您试图实现一个函数,该函数将表示为标量,例如问题中建议的百分比,表示一个字符串与另一个字符串的相似程度。

普通字符串距离函数,例如 hammingLevenstein可能不合适,因为它们在字符级别而不是单词级别工作,但通常这些算法传达了所需内容的想法。

在单词级别工作时,您可能还需要考虑一些常见的 NLP 功能,例如忽略(或降低权重)非常常见的单词(例如“the”、“in'、'of' 等)并且可能允许某些形式的词干提取。单词的顺序,或者至少它们的接近程度也可能很重要。

要记住的一个关键因素是,即使使用相对较短的字符串,从计算的角度来看,许多距离函数也可能非常昂贵。在选择一种特定算法之前,您需要了解问题的一般参数:

  • 需要比较多少个字符串? (平均,最大值)
  • 字符串包含多少个单词/标记? (平均,最大值)
  • 是否可以引入一个简单(快速)的过滤器来减少要比较的字符串的数量?
  • 我们需要多花哨的语言特征?
  • 是否可以对字符串进行预处理?
  • 是否所有记录都使用一种语言?

Comparing Methods for Single Paragraph Similarity Analysis ,一篇学术论文提供了相关技术和注意事项的调查。

简而言之,可以应用这个相对开放的问题的设计时和运行时量差异很大,通常是所需精度级别与运行时资源和整体复杂性之间的折衷可接受的解决方案。
在最简单的形式中,当单词的顺序无关紧要时,根据 TF-IDF 计算因子之和。匹配的词的值可能是一个非常可接受的解决方案。
更高级的解决方案可能会引入从 NLP 借来的流程管道,例如 Part-of-Speech Tagging (说是为了避免误报,比如“SAW”作为名词(砍木头),“SAW”作为动词“to”的过去式见”。或者更有可能根据语法功能彻底过滤一些词),词干提取和可能的语义替换,概念提取或 latent semantic analysis .

关于java - 是否可以在 C# 或 JAVA 中开发一些基于字符串的搜索条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5432244/

相关文章:

java - 将所有8位二进制序列放入字符串数组Java

c++ - 如何将数据插入 map<string, set<string>> C++?

java - 从文件读取时出现 NullPointerException

java - Eclipse 不会自动设置 "Import"语句

java - 检查键值对列表中具有相同键的值

c# - 如何在 C# 中使用动态对象实现事件访问器

c# - 是否可以通过命令提示符从 C# 运行 python 代码?

java - Commons FTPClient - 如果 FTP 服务器不可用,storeFile() 挂起

Java:提取特定字符后的字符

c# - 此代码如何处理 INotifyPropertyChanged