跳转到主要内容 链接 搜索 菜单 展开 文档 (外部链接)

项目 2B/C 可选功能

开始

本作业的其余部分是可选的,但强烈建议完成。

项目的这一部分结合了 NGramMap (项目 2a)和 WordNet (项目 2b)的功能。首先,将 HistoryHandler HistoryTextHandler NGramMap TimeSeries 从项目 2a 复制到项目 2b。你还应该调整 Main.java ,使其注册所有三个处理器。

添加新按钮

获取下义词列表很酷,但有时更酷的是绘制它们的相对频率。例如,如果用户输入单词"food, cake",startYear = 1900,endYear = 2020,k = 8,然后点击"Hypohist",他们将能够看到在1900年到2020年期间,作为food和cake下义词的8个最流行单词的相对频率。

在这一部分中,你将编辑三种不同类型的文件:

  • HTML
  • JavaScript
  • Java

我们假设你之前没有接触过HTML或JavaScript。在现实世界的项目中,你经常需要修改你不熟悉的代码,甚至可能是你从未见过的编程语言。

添加 Hypohist 按钮

打开 ngordnet.html 文件。找到创建现有按钮的代码,例如 History Hyponyms 。凭你的直觉,复制并粘贴你认为必要的代码片段,创建两个新按钮,分别显示"Hypohist"和"Hypohist (text)"。

完成后,尝试点击Hypohist按钮,什么都不会发生。

创建 Hypohist 处理器

回到 Ngordnet.main.Main ,注册一个名为 HypohistHandler 的新处理器。它应该注册到字符串 hypohist 。这个处理器应该简单地返回文本"hello i 上午 hypohist"。运行你的Java服务器,它现在已经准备好监听Hypohist的点击了。

在服务器运行的情况下,尝试点击Hypohist按钮,……仍然什么都不会发生!

JavaScript 回调

尽管我们的服务器正在监听Hypohist的点击,而且我们也在点击Hypohist按钮,但什么都没有发生!

也就是说,你的浏览器甚至没有尝试将查询发送到你的Java文件。这是因为HTML代码通常是"笨拙的",即基本上除了指定网站的外观外什么都不做。

通常用于描述页面工作方式的语言叫做JavaScript。尽管名字如此,它与Java实际上毫无关系,人们普遍认为这是90年代中期的一种营销策略(见 这个页面 JavaScript创始人Brendan Eich的这段视频 ),当时Java既新潮又酷,而JavaScript刚刚诞生。

让我们窥视前端JavaScript编程的黑暗世界。打开"ngordnet.js"。这段代码充当 浏览器中漂亮(?)的视觉用户界面和你的Java代码之间的中间人。 注意,这个项目的HTML和JavaScript文件没有达到专业标准,老实说,我很快就把它们拼凑在一起了,尽量保持简单,这样你在摆弄它们时至少会感到稍微舒服一些。

你的艰巨任务:尝试修改代码,使得当你点击"Hypohist"按钮时,你能成功获取到你的 HypohistHandler 输出的文本——如果你完全按照我上面的建议去做,应该是"hello i 上午 hypohist"。

这种在快速而粗糙的编程工作中摸索前进的过程,有一个非常老派的词叫"hacking"(黑客行为),尽管这个词现在有很多不同的含义。

提示:

  • 仔细进行模式匹配!
  • 随意编辑、测试和实验。你不会永久破坏任何东西。
  • 如果你搞砸了,使用git checkout来获取JS文件的原始版本。
  • 不要靠问别人怎么做来作弊。这种编辑和试验你不理解的代码的技能在原型设计和快速拼凑代码时非常重要。
  • 在现实世界中,通过这种黑客过程创建的生产代码永远不应该发布。然而,它对于原型设计非常有用!

Hypohist(下义词历史)

接下来,完善Hypohist按钮的处理器,使其按预期工作,也就是说,这个按钮应该返回一个图表,显示Hyponyms返回的单词在指定时间段内的相对频率。

也就是说,我们将做上面所说的事情:例如,如果用户输入单词 "food, cake" ,设置 startYear=1900 endYear=2020 k=8 ,然后点击"Hypohist"按钮,他们将能够看到在1900年到2020年期间,作为food和cake下义词的8个最流行单词的相对频率。

注意:对于Hypohist,如果k > 0,行为相当直接。如果k = 0,应该发生什么还不清楚。也许可以想出一个很酷的主意。

### 选修: Hypohist with 0 K If K 是 0, instead of plotting the k most popular hyponyms, you should plot the total weight history of all words which are hyponyms of the given words. 例如, if the user enters "food, cake", startYear = 1900, endYear = 2020, k = 8, then we'd see a plot of "cat" and "dog", where the cat represents the total weight of ALL hyponyms of cat, and "dog" represents the total weight of ALL hyponyms of dog. 请注意 the web front end sets k to zero if the value 是 missing.

添加更多功能

可选地,为你的工具添加更多功能。一些可能性:

  • 添加额外的按钮,以某种创造性的方式使用一个或两个数据集。例如,你可以绘制特定年份所有单词的平均长度。或者你可以创建一个单词所有下义词的可视化。或者你可以有一个打印两个单词之间最短路径的功能。
  • 下义词搜索会找到所有下义词,无论它们与源词有多远。例如,"dog"的下义词数量巨大。添加一个新字段d,只查找与给定单词距离小于等于d的单词。
  • 添加一个!操作符,例如,如果有人输入"!person, leader",你的代码将找到所有不是人的领导者。