📜  使用Python和 bash 构建基于终端的在线词典

📅  最后修改于: 2021-10-20 10:29:03             🧑  作者: Mango

vv1

昨天我在看电影,我不明白使用的一些词。所以我所做的是,每次我听不懂任何单词时,我都会启动我的浏览器并输入“define [word]”,然后谷歌就会告诉我这个词的含义。但是每次打开浏览器都很烦人(怪我;P)。

我们极客用户喜欢在我们的 linux 系统上操作什么?是的。终点站!

由于打开终端就像 Ctrl+Alt+T 一样简单,我认为如果有一个应用程序在那里使用字典会有所帮助。因此,建立这个的动机!

所以我们现在需要的是词典的单词数据库(废话!)。有一个免费且易于使用的在线词典,称为Glosbe 。它提供了一个非常整洁的  API ,虽然处于测试阶段。它以一种称为 JSON 的格式提供输出,这是所有 API 的标准。

为了使用这个 API,需要向 Glosbe 提供一个包含这个词的查询(HTTP GET 请求),它会返回这个词的含义(+其他项目,如短语等)。

例如,要搜索“hello”这个词,我们需要使用:

http://glosbe.com/gapi/translate?from=eng&dest=eng&format=json&phrase=hello&pretty=true

很明显看到这个词是“你好”[phrase=hello]。 Glosbe 也可以提供从一种语言到另一种语言的翻译。但现在,我们只需要一本英文词典。所以将 from-dest 都设置为英语。当然,这里的输出格式是 JSON(也可以更改为 XML)。访问上面的链接以查看 JSON 格式的输出格式。

现在,剩下的任务是编写一个脚本,用用户想要输入的词替换“hello”(这里)这个词,接收输出,单独解析它的含义并显示。

Python进来了!我们需要编写Python脚本来解析返回的JSON对象。

import urllib #library for fetching internet resources 
import json     #library for json operations 
#import os 
#title=os.environ["word"] 
title = input("Enter word to search: ") #Input word to search dictionary 
print ("Word: ",title )
  
#stores the json formatted output to a variable 
url = 'http://glosbe.com/gapi/translate?from=eng&dest=eng&\ 
format=json&phrase='+title+'&pretty=true' 
  
#json representation of url is stored in variable result 
result = json.load(urllib.urlopen(url)) 
  
#get the first text in "meaning" in "tuc" from result 
print ("Meaning: ", result["tuc"][0]["meanings"][0]["text"]) 

输入

Geek

输出:

Enter word to search: Word:  geek
Meaning:  expert in a technical field, particularly to do with computers

惊讶?只需 9 行代码即可完成此任务!运行它,看看你是否安装了Python编译器。

这个怎么运作?

  • 这里,变量 ‘url’ 存储来自 Glosbe 的 JSON 格式的输出。
  • load 将获取一个Python对象并将其转储到一个字符串[存储在变量 ‘result]’ 中,该字符串是该对象的 JSON 表示。
  • 最后,使用 ‘result[“tuc”][0][“meanings”][0][“text”]’ 单独解析 JSON 的含义并打印。

所以现在它在执行这个脚本时工作。为了做到这一点,我必须导航到存储它的目录,然后运行它。同样,我们可以通过编写一个调用Python脚本的 shell 脚本来简化它。关键是,无论终端所在的目录如何,都可以从任何地方访问它。

所以写了一个bash脚本来调用Python代码。

#!/bin/bash
word="$1"
export word
python /home/vishaag/hacks/bash_scripts/terminal_dictionary.py "word"

要使 bash 文件可全局访问,需要:

  • 添加您希望 Linux 搜索的目录,这也是您的脚本所在的位置。
  • 在文件 .bashrc 中添加目录(位于主文件夹并隐藏;按 Ctrl+H 可查看隐藏文件)。例如,我必须在 .bashrc 文件的顶部添加目录/home/vishaag/hacks/bash_scripts (使用像 gedit/kate 等的文本编辑器)。
  • 在此之后,linux 可以从此文件夹访问您的 bash 脚本。

‘word=”$1?并在脚本中导出 word’ 是将参数从 bash 获取到Python脚本。

$1 表示第一个参数($2 第二个,依此类推。为 n 个参数写 $@)。例如,当你写作时,

$dict hello

(dict 是 bash 脚本的名称) hello 存储在$1 (并复制到 ‘ word ‘ 这里)

然后将其导出到Python脚本。

注意:删除上面Python代码的注释和删除/注释 ‘title = raw_input(“Enter word to search: “)’ 以便使用来自 bash 的参数。

import os
title=os.environ["word"]
#title = input("Enter word to search: ")

它完成了!!

现在您要做的就是保存 shell 脚本并像在终端上运行任何应用程序一样运行它。

这是另一个示例输出

vv2

干杯!

参考:

  • http://www.pythonforbeginners.com/code-snippets/parse-json-objects-in-python
  • http://xmodulo.com/2013/05/how-to-parse-json-string-in-python.html
  • http://linuxcommand.org/lc3_wss0010。 PHP