中⽂分类提取(jwpl)--构建知识图谱
⾸先感谢 :
⼀。中⽂维基数据准备。
  选择:
  LANGCODE]wiki-[DATE]-l.bz2
  [LANGCODE]wiki-[DATE]-
  [LANGCODE]wiki-[DATE]-
  下载完后放在⼀个⽂件夹下。 我放在 F:\zhwiki2019\~  下。
⼆。下载JWPL DataMachine jar包解析数据⽂件
  搜索de.tudarmstadt.ukp.wikipedia.datamachine对应的 ⽂件下载。
  下载后和数据放在同⼀⽬录下。
三。打开cmd,cd到zhwiki2019⽬录下,输⼊以下命令解析。
  java -cp jar-with-dependencies.jar de.tudarmstadt.ukp.wikipedia.datamachine.domain.JWPLDataMachine [LANGUAGE] [MAIN_CATEGORY_NAME] [DISAMBIGUATION_CATEGORY_NAME] [SOURCE_DIRECTORY]
  其中,
    LANGUAGE: 指jwpl⽀持的语⾔,选择⼀个你下载的wikipedia语⾔,⽐如english, chinese
    MAIN_CATEGORY_NAME: 填写⼀个Wikipedia类别层次上属于顶层的类别,⽐如:Contents
    DISAMBIGUATION_CATEGORY_NAME: 填写⼀个有消歧类别的类别名,⽐如:Disambiguation_pages
    SOURCE_DIRECTORY: 上⾯三个wikipedia⽂件的⽬录,⽐如: ~/En2019
  我的命令:
  java -ding=utf8  -cp de.tudarmstadt.ukp.wikipedia.datamachine-0.9.1-jar-with-dependencies.jar
de.tudarmstadt.ukp.wikipedia.datamachine.domain.JWPLDataMachine chinese Contents Disambiguation_pages
~/zhwiki2019
  如果你的系统默认编码不是utf-8(⽐如windows), 可能需要再加⼀个参数:-ding=utf8;
  解析的时间看数据量的⼤⼩和你的cpu。之后会在output下⽣成11个txt.这11个txt就是之后要导⼊mysql的11个表。
  这些⽂件的解释:
1 category --> 类别信息
2      pageId:类别ID,唯⼀
3      name:类别名
4
5 category_inlinks --> 指向类别的链接信息
6      id:类别ID,不唯⼀
7      inLinks:该类别⽗类ID,也就是指向该类别的类别ID
8
9 category_outlinks --> 类别指向的链接信息
10      id:类别ID,不唯⼀
11      outLinks:该类别⼦类ID,也就是该类别指向的那些类别的ID
12
13 category_pages --> 页⾯与类别的关系表
14      id:类别ID,不唯⼀
15      pages:属于该类别ID的页⾯ID
mysql下载jar包16
17 metadata --> 该wikipedia的⼀些元信息,只有⼀条记录
18      language:语⾔
19      disambiguationCategory:运⾏DataMachine填写的消歧类别
20      mainCategory:运⾏DataMachine填写的顶层类别
21      nrofPages:页⾯个数
22      nrofRedirects:重定向个数
23      nrofDisambiguationPages:消歧页⾯个数
24      nrofCategories:类别个数
25      version
26
27 page --> 页⾯信息
28      pageId:页⾯ID
29      name:名字
30      text:全⽂,包含wikimeida的标记信息
31      isDisambiguation:是否是消岐页⾯
32
33 page_categories -->  页⾯与类别的关系表与category_pages信息重复
34
35 page_inlinks --> 指向页⾯的页⾯信息
36      id:页⾯ID,不唯⼀
37      inLinks:指向该页⾯ID的页⾯ID
38
39 page_outlinks
40      id:页⾯ID,不唯⼀
41      outlinks:该页⾯ID指向的页⾯ID
42
43 page_redirects
44      id:页⾯ID,不唯⼀
45      redirects:重定向到该页⾯ID的所有页⾯ID
46
47 pagemapline --> 所有页⾯的title信息,处理重定向等有⽤处
48      id:该页⾯ID
49      name:页⾯title名字
50      pageID:页⾯ID,如果该页⾯是重定向页⾯,该pageID是其指向的那个包含信息的页⾯ID
51      stem:***暂⽆信息
52      lemma:***暂⽆信息
View Code
四。mysql 创建 库。(必须要mysql5.x版本。。我就是8.0.12失败了原因重新下载了5.7.27版本的(
错误:java.sql.SQLException: java.lang.ClassCastException: class java.math.BigInteger cannot be cast to ....)。jwpl通过C3P0来获得datasource.是获取datasource的阶段失败。)
  1.  创建数据库命令(数据库名DB_NAME可以⾃⾏设定):注意要保证创建的数据库的编码是utf-8
CREATE DATABASE [DB_NAME] DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
    我的DB_NAME是zhwiki.
  2.创建所有的表,下载包含所有表结构的sql脚本:脚本,在mysql命令下执⾏改脚本:
mysql> use [DB_NAME];
mysql> source jwpl_tables.sql;  #注意jwpl_tables.sql所在的路径(可以cd 到jwpl_tables.sql的⽬录下直接输⼊这个命令。)
  3.因为我们的数据上传到数据库是存在mysql data⽬录下的,可以通过命令
  ,来修改你的data路径,这⾥不过多说明。
  4,导⼊数据到mysql中
  ⼀个表⼀个表的导⼊,进⼊之前创建的⽤户的数据库
  load data infile 'F:/zhwiki2019/' into table category;
1load data infile 'F:/zhwiki2019/'into table category;
2
3load data infile 'F:/zhwiki2019/output/'into table category_inlinks;
4
5load data infile 'F:/zhwiki2019/output/'into table category_outlinks;
6
7load data infile 'F:/zhwiki2019/output/'into table category_pages;
8
9load data infile 'F:/zhwiki2019/'into table MetaData;
10
11load data infile 'F:/zhwiki2019/'into table Page;
12
13load data infile 'F:/zhwiki2019/output/'into table page_categories;
14
15load data infile 'F:/zhwiki2019/output/'into table page_inlinks;
16
17load data infile 'F:/zhwiki2019/output/'into table page_outlinks;
18
19load data infile 'F:/zhwiki2019/output/'into table page_redirects;
20
21load data infile 'F:/zhwiki2019/'into table PageMapLine;
View Code
五。使⽤JWPL jar包去访问数据
  论⽂中,说了⼯具主要以三个对象展开。直接给出代码。就可以看懂。
page对象:
1import de.tudarmstadt.ukp.wikipedia.api.Category;
2import de.tudarmstadt.ukp.wikipedia.api.DatabaseConfiguration;
3import de.tudarmstadt.ukp.wikipedia.api.Page;
4import de.tudarmstadt.ukp.wikipedia.api.Title;
5import de.tudarmstadt.ukp.wikipedia.api.WikiConstants.Language;
6import de.tudarmstadt.ukp.wikipedia.api.Wikipedia;
7
8import static de.tudarmstadt.ukp.wikipedia.api.WikiConstants.LF;
9
10public class ShowPageInfo {
11
12public static void main(String[] args) throws Exception {
13// 数据库连接参数配置
14        DatabaseConfiguration dbConfig = new DatabaseConfiguration();
15        dbConfig.setHost("localhost");  //主机名
16        dbConfig.setDatabase("wikidb");  //数据库名
17        dbConfig.setUser("root");        //访问数据库的⽤户名
18        dbConfig.setPassword("root");    //访问数据库的密码
19        dbConfig.lish);
20// 创建Wikipedia处理对象
21        Wikipedia wiki = new Wikipedia(dbConfig);
22        String title = "Fruit";
23        Page page = Page(title);
24// wikipedia页⾯的title
25        System.out.println("Queried string      : " + title);
26        System.out.println("Title                : " + Title());
27// 是否是消歧页⾯
28        System.out.println("IsDisambiguationPage : " + page.isDisambiguation());      29// 是否是重定向页⾯
30        System.out.println("redirect page query  : " + page.isRedirect());
31// 有多少个页⾯指向该页⾯
32        System.out.println("# of ingoing links  : " + NumberOfInlinks());      33// 该页⾯指向了多少个页⾯
34        System.out.println("# of outgoing links  : " + NumberOfOutlinks()); 35// 该页⾯属于多少个类别
36        System.out.println("# of categories      : " + NumberOfCategories());
37        StringBuilder sb = new StringBuilder();
38// 页⾯的所有重定向页⾯
39        sb.append("Redirects" + LF);
40for (String redirect : Redirects()) {
41            sb.append("  " + new Title(redirect).getPlainTitle() + LF);
42        }
43        sb.append(LF);
44// 页⾯的所述的所有类别
45        sb.append("Categories" + LF);
46for (Category category : Categories()) {
47            sb.append("  " + Title() + LF);
48        }
49        sb.append(LF);
50// 指向该页⾯的所有页⾯
51        sb.append("In-Links" + LF);
52for (Page inLinkPage : Inlinks()) {
53            sb.append("  " + Title() + LF);
54        }
55        sb.append(LF);
56// 该页⾯指向的所有页⾯
57        sb.append("Out-Links" + LF);
58for (Page outLinkPage : Outlinks()) {
59            sb.append("  " + Title() + LF);
60        }
61        System.out.println(sb);
62    }
63 }
View Code
运⾏的部分结果:
1 Queried string      : Fruit
2 Title                : Fruit
3 IsDisambiguationPage : false
4 redirect page query  : false
5 # of ingoing links  : 4454
6 # of outgoing links  : 811
7 # of categories      : 10
View Code
category对象:
1import de.tudarmstadt.ukp.wikipedia.api.Category;
2import de.tudarmstadt.ukp.wikipedia.api.DatabaseConfiguration;
3import de.tudarmstadt.ukp.wikipedia.api.Page;
4import de.tudarmstadt.ukp.wikipedia.api.WikiConstants.Language;
5import de.tudarmstadt.ukp.wikipedia.api.Wikipedia;
6import static de.tudarmstadt.ukp.wikipedia.api.WikiConstants.LF;
7
8public class ShowCategoryInfo {
9public static void main(String[] args) throws Exception {
10//连接数据库的配置
11        DatabaseConfiguration dbConfig = new DatabaseConfiguration();
12        dbConfig.setHost("localhost");
13        dbConfig.setDatabase("wikidb");
14        dbConfig.setUser("root");
15        dbConfig.setPassword("root");
16        dbConfig.lish);
17// 创建Wikipedia处理对象
18        Wikipedia wiki = new Wikipedia(dbConfig);
19        String title = "Towns in Germany";
20// 创建类对象
21        Category cat = Category(title);
22        StringBuilder sb = new StringBuilder();
23// 类别名
24        sb.append("Title : " + Title() + LF);
25        sb.append(LF);
26// 类别的⽗类信息
27        sb.append("# super categories : " + Parents().size() + LF); 28for (Category parent : Parents()) {
29            sb.append("  " + Title() + LF);
30        }
31        sb.append(LF);
32// 类别的⼦类信息
33        sb.append("# sub categories : " + Children().size() + LF); 34for (Category child : Children()) {
35            sb.append("  " + Title() + LF);
36        }
37        sb.append(LF);
38// 类别下的所有页⾯
39        sb.append("# pages : " + Articles().size() + LF);
40for (Page page : Articles()) {
41            sb.append("  " + Title() + LF);
42        }
43        System.out.println(sb);
44    }
45 }

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。