From 3b829b3458ddc1219ce1c0b625acf219f79617ff Mon Sep 17 00:00:00 2001 From: wcf Date: Wed, 24 Aug 2022 20:55:50 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/dependence.png | Bin 0 -> 40561 bytes ...00\346\261\202\346\217\217\350\277\260.md" | 37 ++++--- readme.md | 91 ++++++++++++++++++ 3 files changed, 117 insertions(+), 11 deletions(-) create mode 100644 doc/dependence.png create mode 100644 readme.md diff --git a/doc/dependence.png b/doc/dependence.png new file mode 100644 index 0000000000000000000000000000000000000000..4f1bc7f699354716690ac28cf3aa1280dbe8e4b4 GIT binary patch literal 40561 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�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 literal 0 HcmV?d00001 diff --git "a/doc/\351\234\200\346\261\202\346\217\217\350\277\260.md" "b/doc/\351\234\200\346\261\202\346\217\217\350\277\260.md" index a657f4a..0771b0f 100644 --- "a/doc/\351\234\200\346\261\202\346\217\217\350\277\260.md" +++ "b/doc/\351\234\200\346\261\202\346\217\217\350\277\260.md" @@ -1,6 +1,9 @@ ## 原始描述 -具体需求: -分词、词性标注、词频统计(主要是提取动词周围的名词进行统计); -短语结构分析,统计CFG规则频次 文件大小txt100k左右,不用重新训练模型啥的,用现成的即可 +具体需求: + +- 分词、词性标注、词频统计(主要是提取动词周围的名词进行统计); +- 短语结构分析,统计CFG规则频次 文件大小txt100k左右,不用重新训练模型啥的,用现成的即可 ## 需求拆解 @@ -8,25 +11,37 @@ ## 输出格式 -句子表: 文件,句子,首字母偏移量,解析器 词语表: 句子id,词语,词性,上位词 分叉表: 关系,左词语,右词语,左词id,右词id,关系代号,左词性,右词性 +- 句子表: 文件,句子,首字母偏移量,解析器 +- 词语表: 句子id,词语,词性,上位词 +- 分叉表: 关系,左词语,右词语,左词id,右词id,关系代号,左词性,右词性 ## 运行分析 -# 开发时的路径 +### 开发时的路径 + +```bash java -jar target/nlp-parser-1.0-SNAPSHOT-jar-with-dependencies.jar -r data/filterRegex.txt -c conll_output.txt -d nlpparsed.sqlite3 data/lz-data/shentiyundongxunlian.txt data/lz-data/tushouxunlian.txt data/lz-data/yujia.txt +``` + +### linux / mac + +```bash +java -jar nlp-parser-1.0-SNAPSHOT-jar-with-dependencies.jar -r data/filterRegex.txt -c conll_output.txt -d nlpparsed.sqlite3 data/lz-data/shentiyundongxunlian.txt data/lz-data/tushouxunlian.txt data/lz-data/yujia.txt +``` + +### windows + +如果解压路径是 D:\\xxx\\yyy -# linux / mac -java -jar nlp-parser-1.0-SNAPSHOT-jar-with-dependencies.jar -r filterRegex.txt -c conll_output.txt -d nlpparsed.sqlite3 data/lz-data/shentiyundongxunlian.txt data/lz-data/tushouxunlian.txt data/lz-data/yujia.txt +先切换到解压的目录: -# windows -# 如果解压路径是 D:\\xxx\\yyy -# 先切换到解压的目录: +```bat D: cd xxx\\yyy # 进行依存句法分析,并把结果存到数据库 nlpparsed.sqlite3 -java -jar nlp-parser-1.0-SNAPSHOT-jar-with-dependencies.jar -r filterRegex.txt -c conll_output.txt -d nlpparsed.sqlite3 data\\lz-data\\shentiyundongxunlian.txt data\\lz-data\\tushouxunlian.txt data\\lz-data\\yujia.txt - -java -jar nlp-parser-1.0-SNAPSHOT-jar-with-dependencies.jar -r filterRegex.txt -c conll_output.txt -d nlpparsed.sqlite3 D:\\!!!!!!!!毕业论文\\nlp-parser.tar\\nlp-parser\\nlp-parser-jar\\data\\lz-data\\shentiyundongxunlian.txt D:\\!!!!!!!!毕业论文\\nlp-parser.tar\\nlp-parser\\nlp-parser-jar\\data\\lz-data\\tushouxunlian.txt D:\\!!!!!!!!毕业论文\\nlp-parser.tar\\nlp-parser\\nlp-parser-jar\\data\\lz-data\\yujia.txt +java -jar nlp-parser-1.0-SNAPSHOT-jar-with-dependencies.jar -r filterRegex.txt -c conll_output.txt -d nlpparsed.sqlite3 +data\\lz-data\\shentiyundongxunlian.txt data\\lz-data\\tushouxunlian.txt data\\lz-data\\yujia.txt +``` ## 统计脚本 diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..2c6b181 --- /dev/null +++ b/readme.md @@ -0,0 +1,91 @@ +# 项目功能 + +分析中文文本的依存关系, 生成 conll 格式的中间文件, 以及本地 sqlite3 数据库文件, 方便统计各种 词, 词性 之间的不同依存关系频次 + +# 使用方法 + +## 生成依存关系数据 + +- 安装 java 环境(>=java8) +- 下载编译好的 jar 包 +- 下载[模型文件](https://file.hankcs.com/hanlp/data-for-1.7.5.zip),解压到 jar 包同一个目录下 目录结构如下 + +```text +. +├── hanlp-data +│ └── data +│ ├── dictionary +│ ├── model +│ ├── README.url +│ └── version.txt +└── nlp-parser-1.0-SNAPSHOT-jar-with-dependencies.jar +``` + +- 运行命令以生成依存关系数据 + +```bash +xxx@xxx:~$ java -jar nlp-parser-1.0-SNAPSHOT-jar-with-dependencies.jar --help +usage: 用法: java -jar .jar files... +模型文件需要放在 ./hanlp-data/ + -c,--conll 中间结果coNLL文件输出路径. 默认: ./conll_output.txt + -d,--database 结果写入的数据库路径. 默认: ./nlpparsed.sqlite3 + -h,--help 显示帮助 + -r,--regex 过滤无效字符的正则文件路径. 默认: ./filterRegex.txt +``` + +如: + +```bash +java -jar nlp-parser-1.0-SNAPSHOT-jar-with-dependencies.jar -r filterRegex.txt -c conll_output.txt -d nlpparsed.sqlite3 +data/shentiyundongxunlian.txt data/tushouxunlian.txt data/yujia.txt +``` + +程序将 + +- 使用当前目录(又叫文件夹)下的 hanlp-data/ 目录内的模型 +- 使用当前目录下的 filterRegex.txt 文件内的正则表达式过滤文本 +- 输出的 conll 文件将位于当前目录下的 conll_output.txt +- 输出的结果详情将位于当前目录下的 nlpparsed.sqlite3 +- 读取当前目录下的 data 目录里的 shentiyundongxunlian.txt tushouxunlian.txt 和 yujia.txt 进行分析 + +## 查看依存关系 + +在输出结果的 conll_output.txt 里, 找到要查看的句子, +粘贴到 [https://urd2.let.rug.nl/~kleiweg/conllu/](https://urd2.let.rug.nl/~kleiweg/conllu/) 可以可视化 + +如复制下面的结果 + +```text +# fileName = data/lz-data/shentiyundongxunlian.txt +# sent_id = 15 +# text = 激活臀部肌群和核心肌群。 +1 激活 激活 v v _ 0 核心关系 _ _ +2 臀部 臀部 n n _ 3 定中关系 _ _ +3 肌群 肌群 n n _ 1 动宾关系 _ _ +4 和 和 c c _ 5 左附加关系 _ _ +5 核心 核心 n n _ 6 定中关系 _ _ +6 肌群 肌群 n n _ 3 并列关系 _ _ +7 。 。 wp w _ 1 标点符号 _ _ +``` + +将得到下图 +![依存关系图示](doc/dependence.png) + +# 二次开发 + +## 依赖包与模型数据包下载地址 + +依赖 [hanlp 版本1.8.3](https://github.com/hankcs/HanLP/releases/tag/v1.8.3) +模型数据包兼容 [data-for-1.7.5.zip](https://file.hankcs.com/hanlp/data-for-1.7.5.zip) md5=1d9e1be4378b2dbc635858d9c3517aaa + +## 从源码打包 + +命令 + +```bash +mvn clean package -Dmaven.test.skip=true +``` + +## 其他 + +可视化网页源码[conllu-viewer](https://github.com/rug-compling/conllu-viewer) \ No newline at end of file