【c言語】テキストファイルからバイト数を算出したい
やりたいこと
自然言語処理について勉強しています。
Wikipediaのdumpデータから本文を抜き出して処理をしようと思ってます。
xmlの処理について試しているのですが、
欲しい出力は,,<title>~~</title>のシークポイント(pb[0])と〜〜部分のバイト数(pb[1])の記入されたファイルです.
シークポイントとバイト数さえわかれば後述の2つ目のプログラムを使って
後述の実行結果のpb[0]部分が0と表示されていて困ってます.
プログラミング構成
jawiki-20211220-pages-articles-multistream2.xml(読み込み先のテキストファイル)
Wiki_getter1_Byte.c(バイト数を算出するプログラム,<Page>〜〜</page>間は取得できている.)
Wikigetter2_text.c(getter1の出力ファイル(get_text_Byte.txt系列)からシークポイントまでfseekしてバイト数分freadしてテキストファイルに記入上と同じくページ全体とテキスト部分が取得できている.)
以下にソースコードを貼り付けます。
========
やりたいこと
自然言語処理について勉強しています。
Wikipediaのdumpデータから本文を抜き出して処理をしようと思ってます。
xmlの処理について試しているのですが、
欲しい出力は,,<title>~~</title>のシークポイント(pb[0])と〜〜部分のバイト数(pb[1])の記入されたファイルです.
シークポイントとバイト数さえわかれば後述の2つ目のプログラムを使って
後述の実行結果のpb[0]部分が0と表示されていて困ってます.
プログラミング構成
jawiki-20211220-pages-articles-multistream2.xml(読み込み先のテキストファイル)
Wiki_getter1_Byte.c(バイト数を算出するプログラム,,欲しいのは<text>~~</text>,<title>~~</title>,<id>~~</id>間のバイト.)
Wikigetter2_text.c(getter1の出力ファイル(get_text_Byte.txt系列)からシークポイントまでfseekしてバイト数分freadしてテキストファイルに記入上と同じくページ全体とテキスト部分が取得できるプログラム.)
以下にソースコードを貼り付けます。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SIZE 256 * 1024 * 1024
int main()
{
size_t p, pb[2];
char *line = malloc(SIZE);
FILE *fp = fopen("jawiki-20211220-pages-articles-multistream2.xml", "r");
FILE *fw = fopen("get_text_byte.txt", "w");
if ((NULL == fp) || (NULL == fw))
abort();
while (p = ftell(fp), fgets(line, SIZE, fp))
{
if (strstr(line, "<page>"))
{
pb[0] = p;
if (strstr(line, "</page>"))
{
pb[1] = pーpb[0];
}
printf("%zu\t%zu\n", pb[0], pb[1]);
}
printf("process ok");
free(line);
fclose(fw);
fclose(fp);
}
========
読み取ったシークポイントとバイトからxmlを抽出するプログラムは既にできているのでこの出力が正しくできるようになりたいです.
*よく言われますが外部ライブラリは利用しない方向でお願いします.
追記に出力の一例を記載しておきます.
補足
出力一例です.pb[1]が取得できてないようです.
1536318555 0
1536318555 0
1536318555 0
1536318555 0
1536318555 0
1536318555 0
1536318555 0
1536318555 0
1536318555 0
1536318555 0
1536318555 0
1536318555 0
1536318555 0
1536318555 0
1536318555 0
1536318555 0
process ok%