やりたいこと
自然言語処理について勉強しています。
Wikipediaのdumpデータから本文を抜き出して処理をしようと思ってます。
xmlの処理について試しているのですが、出力結果が想定とは違って困っています。
やりたいこととしては以下です.
・list_history0.txt の各行が欲しい記事の "タイトル" を示している。
・get_X1.txt の各行が (xml ファイル内の記事の ) "タイトル", "id", "開始バイトオフセット", "バイトサイズ" を示している。
・list_history0.txt から一行ずつ読み込み、 get_X1.txt からタイトルが一致する行を探して"開始バイトオフセット", "バイトサイズ"を利用して xml ファイルからその記事を取り出し、「タイトル(タブ)id(改行)記事」を history_0text.txt に書き出す
プログラミングはあまり得意ではないです。
ソースコードとファイル構成
list_history0.txt(get_X1.txtの一部)
日本ゴルフツアー機構 ファイル:十弗駅看板.jpg 桂米朝 国道101号 笑福亭松鶴 リサジュー図形 ムラカ 日淳 井原裕士
次にget_X1.txt
遠山景晋 493646 2948 0 双子 (映画) 1011517 13316 12558 ユダヤ史関連人物の一覧 1855796 18478 68347 Trip trip 56477 87361 0 新銀行東京 615917 91374 90824 東京都道444号下石神井大泉線 61977 144134 143579 野川さくら 1485326 147328 146788 リメンバー・ミー 1740912 231113 230616 ダヒル・リヤレ・カヒン 787401 233208 232520 ソマリランドの大統領一覧 1094317 237068 236399 バルティ 1094317 242216 3511 歌がチカラ 56477 246360 0 トーンチャン 994927 250016 1231 北海道道145号伊達インター線 1428473 251833 0 アクセス禁止 97976 255003 254438 蒲池城 928380 274271 1331 新潟地震 1583832 276296 0 長崎貿易 872478 310391 309847 春牟古丹島 730521 319037 318416 スター誕生! 1873614 325384 324878 サーキット 1037035 456227 455590 Wikipedia:今日は何の日 9月 597321 510011 44598 WP 1617964 555804 2507 栄町駅 (札幌市) 366911 558992 0 北海道中央バス 1599928 574344 573819 広島電鉄1300形電車 6896 668607 668053 柳川鍋 924713 669194 668686 京都市内の通り 191555 676990 37953 由布岳 918416 715450 0 HN 1486874 724007 723488 コンセルヴァトワール 910758 724984 724479 玉川砂記子 1094317 729024 728336 シラガゴケ類 397108 782982 782331 NC 059668 785975 5126 スギゴケ 1781685 791744 0 摂津源氏 990884 794923 794341 NE 262022 805690 805156 NG 1718990 808263 807633 源氏嫡流 279186 810908 810440 魔性の子 1680100 819840 819300 NI 474 844662 844142 NL 104512 846162 845675 翼細胞 208476 847883 847316 NO 230804 848873 848430 多田源氏 990884 850953 850420 NR 786173 863825 863328 フワランポーン駅 1356379 866728 866158 キングカメハメハ 1693773 886601 886041 OM 387704 978075 977510 苔 826261 980849 980395 徐世昌 16765 988907 988200 NY市警緊急出動部隊 トゥルー・ブルー 791294 997442 996895 PE 1627601 1006180 3452 セラミック噴射装置 3751 1010197 0 堀内賢雄 12357 1010829 1010266 筑後宇都宮氏 575671 1197925 1197423 リンカーン (競走馬) 194189 1202581 1201984 PK 703098 1223633 3515 真田町 1231761 1229043 6504 トンファー 503710 1236096 0 情報処理技術者試験 444436 1244748 1244203 キングマンボ 1728221 1308947 1308351 イースター (曖昧さ回避) 120987 1322716 1322186 田中新兵衛 760804 1324023 1323537 PR 703098 1331531 1331062 PT 665832 1336401 1335869 高橋俊昌 291984 1341864 1341250 PW 136753 1350315 1349839 坂城町 685790 1352052 1351543 セレン整流器 1094317 1362107 1361338 ポリアクリルアミドゲル電気泳動 520484 1365670 1365099 シェルピンスキー数 990884 1371139 1370494 はだしのゲン 1126159 1379494 1378926 伊王島町 1338147 1525866 1525301 ノイローゼ 371027 1539066 1538569 原子力発電所 1084393 1540501 1539942 宮崎県総合運動公園第二硬式野球場 320096 1569579 7259 藤田瞳子 1094317 1578500 6210 赤外分光法 1768613 1585235 0 宇都宮清原工業団地 850234 1599642 1599097 樊噲 262022 1603667 1603179 国道385号線 7146 1611313 1610756 深川 1094317 1612117 1611379 碓氷第三橋梁 308365 1616321 5517 //読み込みたいところ 日本ゴルフツアー機構 870371 1623035 25562 ファイル:十弗駅看板.jpg 1780509 1649736 682 桂米朝 1589144 1652031 1217 国道101号 643806 1654059 0 笑福亭松鶴 1143138 1672954 1672423 リサジュー図形 1037035 1682479 1681821 ムラカ 885381 1691394 14441 日淳 1037035 1706472 0 井原裕士 308365 1710132 1709601 //読み込みたいところここまで ソマリア内戦 1037035 1714267 36576 深川 (江東区) 020100 1751367 0 日昇 833366 1764959 1764447 以下略
次にソースコードです.//追記に現在のソースを追加してます.
#include <stdio.h> #include <stdlib.h> #include <string.h> #define SIZE 256 * 1024 * 1024 int main() { int p = 0; int pb[3] = {}; char *line = malloc(SIZE); char *title = malloc(SIZE); char *id = malloc(SIZE); char *text = malloc(SIZE); char *stitle=malloc(SIZE); FILE *fp = NULL; FILE *fr = NULL; FILE *fr2 = NULL; FILE *gt = NULL; fp = fopen("jawiki-20211220-pages-articles-multistream2.xml", "r");//大元.wiki記事 fr = fopen("list_history0.txt", "r"); //読み込むファイル検索文字列 fr2 = fopen("get_X1.txt", "r");//読み込むファイル2タイトルとidが記入 gt = fopen("history_0text.txt", "w"); //書き込むファイル while (fscanf(fr, "%s\n", stitle) != EOF) { printf("Stitle(検索対象)is %s.\n", stitle); while (fscanf(fr2, "%s\t%s\t%d\t%d\n", title, id, &pb[0], &pb[1]) != EOF) { printf("確認用title:%s\tID:%s\n",title,id); if ((strcmp(stitle, title) == 0)) //タイトルが見つかった時. { printf("%s is found! title:%s\n", stitle, title); fseek(fp, pb[0], SEEK_SET); fgets(text, pb[1], fp); printf("%s\t%s\n%s", title, id, text); } else { continue; } } } printf("\n\n\nprocess ok!\n\n\n"); fclose(fp); fclose(fr); fclose(fr2); fclose(gt); }
一応現在の実行結果です.
追記:
今のソースコードです.
タイトルとid処理を一通りやって終わってるようです.
以下ソースコードと実行結果です.idとタイトルは表示できてるようです.
#include <stdio.h> #include <stdlib.h> #include <string.h> #define SIZE 256 * 1024 * 1024 int main() { int p = 0; int pb[3] = {}; char *line = malloc(SIZE); char *title = malloc(SIZE); int *id = malloc(SIZE); char *text = malloc(SIZE); char *stitle=malloc(SIZE); FILE *fp = NULL; FILE *fr = NULL; FILE *fr2 = NULL; FILE *gt = NULL; fp = fopen("jawiki-20211220-pages-articles-multistream2.xml", "r");//大元.wiki記事 fr = fopen("list_history0.txt", "r"); //読み込むファイル検索文字列 fr2 = fopen("get_X1.txt", "r");//読み込むファイル2タイトルとidが記入 gt = fopen("history_0text.txt", "w"); //書き込むファイル while (fscanf(fr, "%s\n", stitle) != EOF) { printf("Stitle(検索対象)is %s.\n", stitle); fr2 = fopen("get_X1.txt", "r"); while (fscanf(fr2, "%s\t%d\t%d\t%d\n", title, id, &pb[0], &pb[1]) != EOF) { printf("確認用title:%s\tID:%d\n",title,id); if ((strcmp(stitle, title) == 0)) //タイトルが見つかった時. { printf("%s is found! title:%s\n", stitle, title); fseek(fp, pb[0], SEEK_SET); fgets(text, pb[1], fp); printf("%s\t%d\n%s", title, id, text); } else { continue; } } fclose(fr2); } printf("\n\n\nprocess ok!\n\n\n"); fclose(fp); fclose(fr); fclose(gt); }
cmd
1 2確認用title:警察学校 ID:1463812096 3確認用title:ファイル:Kasai-ichijyoji-kaizan1.JPG ID:1463812096 4確認用title:Template:石勝線 ID:1463812096 5確認用title:ロドピ山脈 ID:1463812096 6確認用title:ボブ・ゲルドフ ID:1463812096 7確認用title:Template:根室本線2 ID:1463812096 8確認用title:商船三井ビルディング ID:1463812096 9確認用title:Template:根室本線1 ID:1463812096 10確認用title:ファイル:Kasai-ichijyoji-Jougyoudou.JPG ID:1463812096 11確認用title:Category:干潟 ID:1463812096 12確認用title:Template:根室本線3 ID:1463812096 13確認用title:ジュゼッペ・マッツィーニ ID:1463812096 14確認用title:総括制御 ID:1463812096 15確認用title:羽車 ID:1463812096 16確認用title:Template:釧網本線 ID:1463812096 17確認用title:劇団たいしゅう小説家 ID:1463812096 18確認用title:応急手当普及員 ID:1463812096 19確認用title:河内十人斬り ID:1463812096 20確認用title:Template:石北本線 ID:1463812096 21確認用title:宇佐美-網代バイパス ID:1463812096 22確認用title:ファイル:Kasai-ichijyoji-33jizo.JPG ID:1463812096 23確認用title:鈴木邦彦 ID:1463812096 24確認用title:(作曲家) ID:1463812096 25確認用title:島根県道201号湯里停車場祖式線 ID:1463812096 26確認用title:Template:宗谷本線 ID:1463812096 27確認用title:ゴーロン星人 ID:1463812096 28確認用title:ロベルト・デュラン ID:1463812096 29確認用title:アフォンソ1世 ID:1463812096 30確認用title:(ポルトガル王) ID:1463812096 31確認用title:グルンヴァルト ID:1463812096 32確認用title:島根県道186号美郷大森線 ID:1463812096 33確認用title:堀内昭義 ID:1463812096 34確認用title:ファイル:Akame48Taki-iriguchi.JPG ID:1463812096 35確認用title:出雲バイパス ID:1463812096 36確認用title:アズバーズ ID:1463812096 37確認用title:大沢悠里のにっぽん元気カンパニー ID:1463812096 38確認用title:堀口健治 ID:1463812096 39確認用title:島根県道288号瓜坂川合線 ID:1463812096 40確認用title:トヨタ・M型エンジン ID:1463812096 41確認用title:パルマラット ID:1463812096 42確認用title:地名に由来する小惑星の一覧 ID:1463812096 43確認用title:Wikipedia:削除依頼/アルバムの一覧 ID:1463812096 44確認用title:人名に因む名を持つ小惑星の一覧 ID:1463812096 45確認用title:日本神話に関する名を持つ小惑星の一覧 ID:1463812096 46確認用title:吾妻橋 ID:1463812096

回答5件
あなたの回答
tips
プレビュー