分享一个能对java代码进行“tokenize”的python库

个人博客:记录一下在项目实施过程中的一些点

情景回顾

项目遇到需求,需要将Java代码进行“tokenize”,即“令牌化”。所谓令牌化,就是指,将java代码,转化为一个由令牌组成的序列。而其中的“令牌”,其实就是一个个的“词”和代码中的“符号”。

举个例子,有代码如下:

package effectivejava.chapter2.item8;public class Adult {public static void main(String[] args) {try (Room myRoom = new Room(7)) {System.out.println("Goodbye");}}
}

我需要将上面的代码令牌化,期待得到如下结果:

['package', 'effectivejava', '.', 'chapter2', '.', 'item8', ';', 'public', 'class', 'Adult', '{', 'public', 'static', 'void', 'main', '(', 'String', '[', ']', 'args', ')', '{', 'try', '(', 'Room', 'myRoom', '=', 'new', 'Room', '(', '7', ')', ')', '{', 'System', '.', 'out', '.', 'println', '(', '"Goodbye"', ')', ';', '}', '}', '}']

将Java代码转化为词序列,然后给每个词赋予编号,用编号替代相应的词,即可以完成对Java代码的一种简单的编码。后续在输入神经网络中会方便很多。

推荐工具

我使用的工具为:javalang库(https://github.com/c2nes/javalang)
使用这个工具能很快速地完成上述转换,一个简单demo为:

import javalangtokens = javalang.tokenizer.tokenize("""package effectivejava.chapter2.item8;public class Adult {public static void main(String[] args) {try (Room myRoom = new Room(7)) {System.out.println("Goodbye");}}}"""
)final_token_list = []for token in tokens:final_token_list.append(str(token.value))print final_token_list

对我来说,这个库的好处在于:

  • 它是使用Python语言来解析Java代码,所以对于用户很友好(Python编写比Java简单)
  • 它可以对代码片段进行解析。因为在我的项目中,数据全是一些Java代码片段,使用javalang来解析也十分方便

一些资源

javalang官方Github:https://github.com/c2nes/javalang

分享一个能对java代码进行“tokenize”的python库相关推荐

  1. Java培训分享5个常用Java代码混淆器

    对于Java程序员来说,如果辛辛苦苦写的代码被人摽窃走,将是一件非常恼火的事情.如何保护自己的代码呢,可以通过逆向工程反编译得到Java程序的源代码,这种反编译工具之一就是JAD,尽可能给反编译人员制 ...

  2. 分享一个爱心的特效代码

    给大家分享一个用html+js写的爱心特效代码,打开你的dw或者vscode编辑器,将代码丢进去运行就行,小白请参考第二点 目录 一.有代码基础的同学看这儿 效果: 源码: 有些新入门的铁子可能不知道 ...

  3. java代码调用python_Java调用Python

    常见的java调用python脚本方式有两种,下面给大家介绍一下: 通过Jython.jar提供的类库实现 通过Runtime.getRuntime()开启进程来执行脚本文件 这两种方法我都尝试过,个 ...

  4. append一个option会多出一个空的_Collections | 你必须会的Python库

    后台回复1024,解锁无限快乐! 来源: 南枝向暖北枝寒MA https://blog.csdn.net/mall_lucy/article/details/108822795 什么是collecti ...

  5. 分享一个宝藏级 Java 插件

    最近在学习伯克利 CS 61b 公开课时候,发现了一个 Java 插件 Java Visualizer,主要用于观察程序执行时的变量和方法的变化情况,可以在Debug 模式下一步一步的观察到程序变化的 ...

  6. 今天给大家分享一个HTML5的钢琴代码,可以弹奏的哦!(附完整源码)

    它是一个可以弹奏的钢琴,所以它需要音频文件,在这里发不了,这里只有代码,音频文件的分享在文章末尾哦. <!doctype html> <html lang="en" ...

  7. 一个类的java代码_求一段java代码,定义一个类

    你看看这样行不行:public class Test{ private String str; public Test(){} public Test(String str){ this.str =  ...

  8. java代码调用python_java调用python代码-阿里云开发者社区

    同样的我们需要安装jython,具体的步骤如下: 2. 下载下来的jar包其实既是使用的时候需要引入的jar包,也是安装就jython的jar包.具体安装细节参照:https://wiki.pytho ...

  9. python项目软件代码_七套Python库快速提升您项目的代码可维护性,软件工程,代码库...

    保护项目未来可维护性的一种理想方式,在于利用外部库检查您的代码运行状况.以下是目前开发人员最喜爱的的代码梳理库,它们能够以强制方式执行一致性样式,并确保项目在成熟之后仍具备可接受的测试覆盖率. 当软件 ...

  10. java源文件编译成jar_从源文件和JAR文件构建Java代码模型

    java源文件编译成jar 最近,我花了一些时间来研究有效java ,该方法正在GitHub上达到300星(可以免费帮助实现目标:D). Effectivejava是在您的Java代码上运行查询的工具 ...

最新文章

  1. Python制作植物大战僵尸小游戏
  2. Git 通过源码编译安装 2.12.2 遇到的问题及解决
  3. 最优化课堂笔记08——非线性规划中的一些其他方法(考试你懂得)
  4. 最近公共祖先_[LeetCode] 236. 二叉树的最近公共祖先
  5. Linux版本tomcat下载及安装
  6. 简单两个矩阵如何用计算机运算,教你使用excel做矩阵运算
  7. Hexo博客美化之蝴蝶(butterfly)主题魔改
  8. 电影O2O烧钱大战,百度成收割者?
  9. LoadRunner函数大全
  10. 跨品种套利 (期货)
  11. 位图(bitset)的使用【STL】
  12. CB Insights:全面拆解谷歌AI战略布局
  13. 谷歌浏览器在线观看视频有声音但画面黑屏问题解决
  14. 创业起步阶段需要注意的几点
  15. idea java 语法高亮_Intellij IDEA 中JAVA常用配置项总结
  16. OpenNI 1.3.2.1发布
  17. 百度云服务器远程密码忘记,2020-11-17 新买了百度云服务器,如何用ssh远程登陆...
  18. 雨巷-----美丽的忧伤
  19. 1办公自动化之批量提取文件名视频教程
  20. Python实现的《芳华》WordCloud词云+LDA主题模型

热门文章

  1. [ZGC升级记录](to-space exhausted/Evacuation Failure)
  2. python中的 zip函数详解
  3. 解析京东大数据下高效图像特征提取方案
  4. 论文笔记 - Learning Compact Binary Descriptors with Unsupervised Deep Neural Networks
  5. 「牛市」的危险和川普的口罩|极客一周
  6. 益企工程云:成长型建筑企业专属的工程项目管理软件
  7. Trivial、Non-Trivial和POD类型
  8. 基于BP神经网络的车牌识别问题研究附Matlab代码
  9. meta http-equiv=refresh content=0; url=是什么意思
  10. 使用wandb报错:ERROR Error while calling WB API: project not found (<Response [404]>)