Java用本地字典数据库实现英语单词翻译

打印 上一主题 下一主题

主题 872|帖子 872|积分 2616

Java用本地字典数据库实现英语单词翻译

依赖的准备
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3.          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  4.     <modelVersion>4.0.0</modelVersion>
  5.     <groupId>com.example</groupId>
  6.     <artifactId>ExtractWord</artifactId>
  7.     <version>0.0.1-SNAPSHOT</version>
  8.     <name>ExtractWord</name>
  9.     <description>ExtractWord</description>
  10.     <properties>
  11.         <java.version>1.8</java.version>
  12.         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  13.         <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  14.         <spring-boot.version>2.6.13</spring-boot.version>
  15.     </properties>
  16.     <dependencies>
  17.         
  18.         <dependency>
  19.             <groupId>org.springframework.boot</groupId>
  20.             <artifactId>spring-boot-starter-web</artifactId>
  21.         </dependency>
  22.         <dependency>
  23.             <groupId>org.springframework.boot</groupId>
  24.             <artifactId>spring-boot-starter-test</artifactId>
  25.             <scope>test</scope>
  26.             <version>${spring-boot.version}</version>
  27.         </dependency>
  28.         <dependency>
  29.             <groupId>org.springframework.boot</groupId>
  30.             <artifactId>spring-boot-starter-web</artifactId>
  31.         </dependency>
  32.         <dependency>
  33.             <groupId>org.mybatis.spring.boot</groupId>
  34.             <artifactId>mybatis-spring-boot-starter</artifactId>
  35.             <version>2.2.2</version>
  36.         </dependency>
  37.         <dependency>
  38.             <groupId>com.mysql</groupId>
  39.             <artifactId>mysql-connector-j</artifactId>
  40.             <scope>runtime</scope>
  41.         </dependency>
复制代码
持久层

现在我们开始构建持久层数据库的部分。我们先从网上找了一个数据库文件,这个网上很好找的。
  1. package com.example.extractword.entity.model;
  2. import lombok.Data;
  3. @Data
  4. public class WordModel {
  5.     private String id;
  6.     private String word;
  7.     private String enPronunciation;
  8.     private String usPronunciation;
  9.     private String description;
  10. }
复制代码
把数据库建好之后的下一步就是要去编写对应的接口类了。
  1. package com.example.extractword.mapper;
  2. import com.example.extractword.entity.model.WordModel;
  3. public interface WordMapper {
  4.     WordModel findByWord( String word);
  5.     Integer insert(WordModel wordModel);
  6. }
复制代码
我们现在就设置了两个方法,一个是插入,一个是查询。按理来说我们已经有了字典数据库了,还需要插入什么吗?不过有些时候在一些主动程序里,指不定不要查一些什么词,某个词的衍生词或者词性变换等大概字典里可就没有,那这时候就需要借助别的手段来获取信息然后插入进去。
现在开始写对应的mapper.xml文件。
  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper
  3.         PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4.         "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5. <mapper namespace="com.example.extractword.mapper.WordMapper">
  6.     <resultMap id="WordModelMap" type="com.example.extractword.entity.model.WordModel">
  7.         <id column="id" property="id"></id>
  8.         <result column="en_pronunciation" property="enPronunciation"></result>
  9.         <result column="us_pronunciation" property="usPronunciation"></result>
  10.     </resultMap>
  11.     <insert id="insert" useGeneratedKeys="true" keyProperty="id">
  12.         INSERT INTO tb_words(word,en_pronunciation,us_pronunciation,description) VALUES (#{word},#{enPronunciation},#{usPronunciation},#{description})
  13.     </insert>
  14.     <select id="findByWord" resultMap="WordModelMap">
  15.         SELECT * FROM tb_words WHERE word = #{word}
  16.     </select>
  17. </mapper>
复制代码
这个写法可以参照我的另一篇文章用一个项目把控制层、业务层、持久层阐明白了,每一句话都讲的很清晰 - ivanlee717 - 博客园来对着写。
详细用到插入的时候我们再细讲。
然后在application.properties文件里设置好相干的数据库信息
  1. #指定Mybatis的Mapper文件
  2. mybatis.mapper-locations=classpath:mapper/*.xml
  3. #指定Mybatis的实体目录
  4. mybatis.type-aliases-package=com.example.extractword.entity.model
  5. # 应用服务 WEB 访问端口
  6. server.port=8081
  7. spring.datasource.url=jdbc:mysql://localhost:3306/YOUR_DATABASE?useUnicode=true&characterEncoding=utf-8
  8. spring.datasource.username=root
  9. spring.datasource.password=*****
复制代码
业务层
  1.     public String fetchDataFromDictionary(String word){
  2.         try {
  3.             WordModel wordModel = new WordModel();
  4.             wordModel = wordMapper.findByWord(word);
  5.             if (wordModel == null) {
  6.                 wordModel = fetchWordFromNet(word);
  7.             }
  8.             DictionaryDto dictionaryDto = new DictionaryDto();
  9.             dictionaryDto.setWord(word);
  10.             dictionaryDto.setEnPronunciation(wordModel.getEnPronunciation());
  11.             dictionaryDto.setUsPronunciation(wordModel.getUsPronunciation());
  12.             dictionaryDto.setDescription(wordModel.getDescription());
  13.             // Check if pronunciation is available
  14.             if ((dictionaryDto.getEnPronunciation() == null || dictionaryDto.getEnPronunciation().isEmpty()) &&
  15.                     (dictionaryDto.getUsPronunciation() == null || dictionaryDto.getUsPronunciation().isEmpty())) {
  16.                 return "单词: " + word + ", 发音未找到, 翻译: " + dictionaryDto.getDescription();
  17.             }
  18.             return dictionaryDto.DToConvertToString();
  19.         } catch (Exception e) {
  20.             return "单词: " + word + ", 异常: " + e.getMessage();
  21.         }
  22.     }
复制代码
主要的逻辑就在这个方法里面。不过这之前要设定好service接口和这个impl实现方法。这里我们引入了dto规范,因为字段比较少,所以他和数据库的内容是完全一样的,但是如果没有返回数据,则阐明数据库里没有这个单词,我们就需要借助网络来翻译。这个方法我也已经在Java实现单词的翻译(详解爬虫操作) - ivanlee717 - 博客园这里面说清晰了
  1. package com.example.extractword.entity.dto;
  2. import lombok.Data;
  3. @Data
  4. public class DictionaryDto {
  5.     private String word;
  6.     private String enPronunciation;
  7.     private String usPronunciation;
  8.     private String description;
  9.     public String DToConvertToString(){
  10.         StringBuilder sb = new StringBuilder();
  11.         sb.append(word).append(": ");
  12.         if (enPronunciation != null && !enPronunciation.isEmpty()) {
  13.             sb.append("英式发音: ").append(enPronunciation).append(", ");
  14.         }
  15.         if (usPronunciation != null && !usPronunciation.isEmpty()) {
  16.             sb.append("美式发音: ").append(usPronunciation).append(", ");
  17.         }
  18.         sb.append("翻译: ").append(description);
  19.         return sb.toString();
  20.     }
  21. }
复制代码
这样的话我们就通过find方法找到了单词。
现在再说一下insert方法
  1. WordModel wordModel = new WordModel();
  2. wordModel.setWord(word);
  3. wordModel.setEnPronunciation(En_phoneticElements.first().text().toString());
  4. wordModel.setUsPronunciation(US_phoneticElements.first().text().toString());
  5. for (Map<String, String> result : results) {
  6.     String pos = result.get("pos");
  7.     String translation = result.get("translation");
  8.     combinedResult.append(pos).append(translation).append(" ");
  9. }
  10. wordModel.setDescription(combinedResult.toString().replace("'", "''"));
  11. Integer res = wordMapper.insert(wordModel);
复制代码
我们把对应的爬取信息存到一个对象里面,按照字段依次插入进去就可以了。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

知者何南

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表