首页 > 解决方案 > 如何检查变量是否类似于字符串?

问题描述

试图找到一种将用户输入分配给变量的方法,然后检查该变量的值是否与我在文本文件中的任何字符串相似。

现在我有

read -r userinput     ###assigns user input to var $userinput
x=${userinput,,}      ### makes user input lower case in var $x

现在 x = 小写用户输入我想检查 x 是否类似于指定文本文件中的任何字符串。假设用户输入是hi how are you doing today并且文本文件包含一个字符串,该字符串是两个字符串中how are you today的单词how are you today。有什么方法可以匹配这些字符串并返回 0 或 1 的值,类似于 grep?我知道这在其他语言中比使用 shell 要容易得多,但我正在尝试在 shell 中进行基本的机器学习。如果有人知道这是否可能,请告诉我。

标签: bashshell

解决方案


您需要计算LCS(最长公共子序列),或者至少是两个字符串之间的编辑距离。

一般来说,没有一种语言可以为您提供计算这些的函数,因此您应该自己编写算法。

您可以从Rosetta Code中获得灵感,其中 LCS(实际上是它的不同变体)以多种语言实现。


请注意,如果您希望算法检测与hi how are you today非常相似today you are how hi,则 LCS/编辑距离算法不是您想要的,因为这两个算法寻找有序序列并且不检测元素的改组。

在这种情况下,您最好考虑其他方法,例如将一个字符串拆分为单词,循环这些单词并检查每个单词是否存在于另一个字符串的某个位置。


推荐阅读