【发布时间】:2021-10-01 10:21:11
【问题描述】:
我有一个 bash 函数,可以让我查看来自 Google 的单词定义:
defword() {
if [ -z $2 ]; then
header=30
else
header=$2
fi
lynx -dump "http://www.google.com/search?hl=en&q=define%3A+${1}&btnG=Google+Search" | grep -v "\[1\] Google" | grep -v "define: ${1}__" | grep -v "\[2\]IMAGES" | head -${header}
}
例如defword dog 将显示 'dog' 的前 30 行输出,defword dog 50 将显示前 50 行。
我突然想到,如果我能抓住“名词”、“动词”、“维基百科”等部分,这可能会更清晰。
您能否建议我可以运行的方法(可能使用 grep、sed 或 awk?)说 defword dog noun 将显示整个名词部分(从单词“名词”到下一部分之前的空白行)、defword dog noun 2 仅显示名词部分的定义 2(如果存在这些部分,则“动词”或“形容词”也相同),以及 defword dog wikipedia 显示出现在名词和动词下方的维基百科定义(可以通过使用上述功能执行defword dog 100 来查看该维基百科部分)?
【问题讨论】:
-
虽然这不能直接回答您的问题,但您最好使用诸如dictionaryapi.dev 之类的 API 运行
curl https://api.dictionaryapi.dev/api/v2/entries/en/dog会得到一个 json 格式的结果,通过管道到类似的东西很容易解析jq -
会有其他 API 用于各种事情 - API 通常用于程序与网页对话 - 许多网页都有自己的 API,包括 google 的所有服务(@ 987654322@) 。请注意,它们通常很难上手,因为它们需要设置密钥并且请求有限。上面的字典恰好很简单。
-
如果我需要在命令行上执行此操作,我总是使用 jq,或者使用 python 及其 json 包进行更多涉及的工作。对于字典,jq 命令将是
jq '.[] | .meanings[] | select(.partOfSpeech=="noun") | .definitions | .[].definition' -
事实证明我给你的链接 dictionaryapi.dev 只是搜索谷歌并进行你正在寻找的文本处理!它的开发者在这里展示了它:stackoverflow.com/a/48983463/1581658 它是用 javascript 而不是 bash 编写的
-
哦,当然,我知道一般的 API 是什么(我在各种编程中一直使用它们),但我以前从未见过这样的网页。我玩过字典之一,但奇怪的是(因为你说它只是搜索谷歌)与谷歌的结果相比,它似乎缺乏定义。非常感谢
jqsn-p,太好了,我会建立一些样本并保存在我的个人资料中,将来我一定会好好利用这些。 ??????