質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

MediaWiki

MediaWikiは、Wikipediaを運営するウィキメディア財団が開発するコラボレーションツールです。複数ユーザーによるコンテンツ管理機能を備えるなど、Wikipediaと同じ操作性や編集機能を持ちます。PHPで記述されており、MySQLやPostgreSQLをデータベースに使用できます。

解決済

wikipedia dump データの処理について〜読み込みと反映ができない〜

studyprg
studyprg

総合スコア42

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

MediaWiki

MediaWikiは、Wikipediaを運営するウィキメディア財団が開発するコラボレーションツールです。複数ユーザーによるコンテンツ管理機能を備えるなど、Wikipediaと同じ操作性や編集機能を持ちます。PHPで記述されており、MySQLやPostgreSQLをデータベースに使用できます。

4回答

0リアクション

0クリップ

405閲覧

投稿2022/06/11 11:26

編集2022/06/13 06:08

やりたいこと

自然言語処理について勉強しています。
Wikipediaのdumpデータから本文を抜き出して処理をしようと思ってます。
xmlの処理について試しているのですが、出力結果が想定とは全然違って困っています。
欲しい出力は,,<page>~~</page>の中身です。
後述の一例が取得できず困っています。
プログラミングはあまり得意ではないです。

実行環境

Macbook pro(2017)
OS:11.6.7

以下に用意したファイル(記事の始点と記事の大きさのbyte数が入っている。)の一部とソースコードを貼り付けます。

get_text_byte.txt

607      10049 12666      4195 16871      483 17364      633 18007      68927 86944      3990 90944      52745 143699      3193 146902      83814 230726      1897 232633      3884 236527      4580 241117      571 241698      4139 245847      3181 249038      619 249667      1711 251388      3170 ... ...

Wiki_getter2_All.c

#include <stdio.h> #include <stdlib.h> #include <string.h> #define SIZE 256 * 1024 * 1024 int main() { int p, p1 = 0; int pb[5] = {}; char *line = malloc(SIZE); char *title = malloc(SIZE); FILE *fp = NULL; FILE *fr = NULL; FILE *gt = NULL; fp = fopen("jawiki-20211220-pages-articles-multistream2.xml", "r"); fr = fopen("get_text_byte.txt", "r"); gt = fopen("get_text_all.txt", "w"); //中身ないからNULL? while (fscanf(fr, "%d\t%d\n", &pb[0], &pb[1]) != EOF) { /* if (strstr(line, "<page>")) pb[0]=p; else if (strstr(line, "</page>")){ pb[1] = p - pb[0]+1;//readしたとき対策. fseek(fp,-pb[1],SEEK_SET); fprintf(stderr, "start=%d size=%d BUFSIZ=%d\n", pb[0], pb[1], BUFSIZ); // printf("%d",fp); fgets(line,pb[1],fp); //fwrite(pb, sizeof(size_t), 2, fw); // ... //fprintf(fw, "%hhd\t%hhd\n", pb[0], pb[1]); //... 名残 fprintf(fw,"%s \n",line); } */ fseek(fp, pb[0], SEEK_SET); pb[0] = p; printf("現在のファイルポインタの位置は「%d」です。, 読み込むバイトは「%d」\n", pb[0], pb[1]); fread(line, sizeof(char), pb[1], fp); fprintf(gt, "%s \n", line); line[pb[1]] = 0; } printf("process ok"); free(line); free(title); fclose(fp); fclose(fr); fclose(gt); }

**6/12AM2:00頃:追記のエラー。segmention fault発生。(答えの指摘でもありましたがUbuntsuではうまいこと動くっぽい)

問題は解決してない。。。**
追記:frのopen忘れてました...
解決しました!

欲しい出力の一例です。これが大量に入ったファイルが欲しいです。

sample

<page> <title>鳥取砂丘</title> <ns>0</ns> <id>19812</id> <revision> <id>53717095</id> <parentid>53211643</parentid> <timestamp>2014-12-06T03:46:16Z</timestamp> <contributor> <ip>58.156.158.18</ip> </contributor> <comment>/* 砂丘の利用と周辺住民とのかかわり */</comment> <model>wikitext</model> <format>text/x-wiki</format> <text xml:space="preserve">{{Coord|35|32|27.821|N|134|13|41.789|E|region:JP|display=title}} [[ファイル:Tottori-Sakyu Tottori Japan.JPG|thumb|300px|馬の背]] {{mapplot|134.2290|35.5407|鳥取砂丘}} '''鳥取砂丘'''(とっとりさきゅう)は、[[鳥取県]][[鳥取市]]の[[日本海]]海岸に広がる広大な砂礫地で、代表的な[[海岸砂丘]]。日本三大砂丘の1つである&lt;ref&gt;その他の2つについては、諸説ある。&lt;/ref&gt;。[[山陰海岸国立公園]]の特別保護地区に指定されており、南北2.4km、東西16kmに広がる日本最大の観光可能な[[砂丘]]である。(一般に立ち入れない物も含めると、日本最大の砂丘は&lt;!--(内陸にある砂丘を含めると--&gt;[[青森県]]の[[猿ヶ森砂丘]])。&lt;!--内陸砂丘は大陸内部の砂丘を示し、日本には内陸砂丘なないため編集しました--&gt; [[1955年]](昭和30年)に国の[[天然記念物]]に指定された。[[2007年]](平成19年)には[[日本の地質百選]]に選定された。 == 砂丘の状況 == [[中国山地]]の[[花崗岩]]質の[[岩石]]が[[風化]]し、[[千代川]]によって日本海へ流されたあと、海岸に集まったものが砂丘の主な[[砂]]となっている。海中の砂を海岸に向けて流れ寄せる潮流と、海岸線に[[堆積]]した砂を内陸へ吹き込む[[卓越風]]の働きで形成された。 砂丘は千代川の東西に広がっているが、通常「鳥取砂丘」というと、千代川の東側の545haの「浜坂砂丘」を指す。砂丘によって海から切り離されて出来た湖である[[多鯰ヶ池]]がすぐ南東にある。 <中略> </text> <sha1>axvz6j2vrmxe3n68ssg11m0w8qtcobn</sha1> </revision> </page>

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

studyprg

2022/06/11 14:39

指摘のとうり修正した結果吐き出されたWarningsです。 warning: format specifies type 'int *' but the argument has type 'int' [-Wformat] while (fscanf(fr, "%d \t %d \n ", pb[0], &pb[1]) != EOF) { ~~ ^~~~~ Wiki_getter2_All.c:40:116: warning: format specifies type 'int' but the argument has type 'int *' [-Wformat] printf("現在のファイルポインタの位置は「%d」です。, 読み込むバイトは「%d」\n",p1,&pb[1]); ~~ ^~~~~~ 2 warnings generated.
studyprg

2022/06/11 15:21

指摘の通り修正しましたが変わってないですね。 intで宣言したはずなんですけど。。。
studyprg

2022/06/11 16:54

追記しました。 エラー内容が一部変化しましたが問題解決に至ってません。 ご協力お願いします。
melian

2022/06/12 14:11

あら、確かに fr = fopen("get_text_byte.txt", "r"); が消えてる…
studyprg

2022/06/12 14:16

ありがとうございます! 解決しました!

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

MediaWiki

MediaWikiは、Wikipediaを運営するウィキメディア財団が開発するコラボレーションツールです。複数ユーザーによるコンテンツ管理機能を備えるなど、Wikipediaと同じ操作性や編集機能を持ちます。PHPで記述されており、MySQLやPostgreSQLをデータベースに使用できます。