bash - 如何检查变量是否类似于字符串?
问题描述
试图找到一种将用户输入分配给变量的方法,然后检查该变量的值是否与我在文本文件中的任何字符串相似。
现在我有
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 中进行基本的机器学习。如果有人知道这是否可能,请告诉我。
解决方案
您需要计算LCS(最长公共子序列),或者至少是两个字符串之间的编辑距离。
一般来说,没有一种语言可以为您提供计算这些的函数,因此您应该自己编写算法。
您可以从Rosetta Code中获得灵感,其中 LCS(实际上是它的不同变体)以多种语言实现。
请注意,如果您希望算法检测与hi how are you today
非常相似today you are how hi
,则 LCS/编辑距离算法不是您想要的,因为这两个算法寻找有序序列并且不检测元素的改组。
在这种情况下,您最好考虑其他方法,例如将一个字符串拆分为单词,循环这些单词并检查每个单词是否存在于另一个字符串的某个位置。
推荐阅读
- c# - 如何在 ASP.NET Core WebApi 中将键值对传递给 HttpGet?
- uwp - UWP WebView 中的查看器问题
- phpmyadmin - Laragon 和 phpmyadmin,允许外部访问
- sql - 如何将列值检索为行值?
- html - 背景图像和相邻 DIV React 之间的 Chrome 移动间隙
- arduino - 不断更改 Arduino I2C 总线地址
- dependency-injection - 定义“参数”不支持配置键
- android - 如何在底部工作表内滚动 Recylerview,同时保持底部工作表处于所需状态?
- java - 如何让不和谐的机器人踢出 Java 中的成员?
- oracle - Ubuntu 18.04 上的 Oracle 12.1.0 - 调用 makefile 的目标“链接 proc gen_pcscfg procob”时出错“”
/precomp/lib/ins_precomp.mk''