質問編集履歴

4

修正しました。状況が変わりました。

2022/06/11 06:45

投稿

studyprg
studyprg

score42

test CHANGED
File without changes
test CHANGED
@@ -1,6 +1,7 @@
1
1
  自然言語処理について勉強しています。
2
2
  Wikipediaのdumpデータから本文を抜き出して処理をしようと思ってます。
3
- xmlの処理について試しているのですが、エラーに見舞われて困っています。
3
+ xmlの処理について試しているのですが、出力結果が想定とは全然違って困っています。
4
+ 欲しい出力は,,<page>~~</page>の中身です。
4
5
  segmetation faultが治らず困っています。
5
6
  プログラミングはあまり得意ではないです。
6
7
 
@@ -17,24 +18,25 @@
17
18
 
18
19
  int p=0;
19
20
  char pb[5]={};
20
- char line[BUFSIZ];
21
+ char line[BUFSIZ];//vsstudioにより1024と判明
22
+ FILE *fp =NULL;
23
+ FILE *fw =NULL;
21
- FILE *fp = fopen("jawikiの記事.xml", "r");
24
+ fp=fopen("jawiki-20211220-pages-articles-multistream2.xml" , "r");//wiki
25
+
22
26
  char title[BUFSIZ];
23
27
 
24
28
  //FILE *gt=fopen("list_1.txt","r");
25
- FILE *fw = fopen("get_text_c.txt", "w");
29
+ fw = fopen("get_text_c.txt", "w");//書き込み先
26
- if ((NULL == fp)||(NULL== fw )){
30
+ if ((NULL == fp)||(NULL== fw )){
27
31
  printf("abootしました。");
28
- abort();//終了、ここがうまくいってないのか
32
+ abort();//終了、ここがうまくいってない
29
- $ brew install gdb}
33
+ }
30
34
  while (p = ftell(fp), fgets(line, BUFSIZ, fp)) {
31
-
32
-
33
35
  if (strstr(line, "<page>")){
34
36
  pb[0]=p;
35
37
  }
36
38
  else if (strstr(line, "</page>")){
37
- pb[1] = p - pb[0];
39
+ pb[1] = p - pb[0]+1;
38
40
  fseek(fp,-pb[1],SEEK_CUR);
39
41
  fprintf(stderr, "start=%d size=%d BUFSIZ=%d\n", pb[0], pb[1], BUFSIZ);
40
42
  // printf("%d",fp);
@@ -49,13 +51,18 @@
49
51
  fclose(fp);
50
52
  }
51
53
 
52
- ```
53
-
54
- 次にエラーコードです。(すぐに表示されるので読み込んでいる気配がない。)
55
- ```error
56
- % gcc -g Wiki_getter2_All.c -o get_all
57
- % ./get_all
58
- zsh: segmentation fault ./get_all
59
54
 
60
55
  ```
61
56
 
57
+ 次に出力ファイル(5行ほど)です。
58
+ ```get_text_c.txt
59
+ >chmmooepsrvwuo4n0ziki50nn5rvhj7</sha1>
60
+
61
+ >chmmooepsrvwuo4n0ziki50nn5rvhj7</sha1>
62
+
63
+ >chmmooepsrvwuo4n0ziki50nn5rvhj7</sha1>
64
+
65
+ >chmmooepsrvwuo4n0ziki50nn5rvhj7</sha1>
66
+
67
+ ```
68
+

3

ソースコード修正

2022/06/10 10:19

投稿

studyprg
studyprg

score42

test CHANGED
File without changes
test CHANGED
@@ -7,7 +7,7 @@
7
7
 
8
8
  以下にソースコードを貼り付けます。
9
9
 
10
- ```c
10
+ ```
11
11
  #include <stdio.h>
12
12
  #include <stdlib.h>
13
13
  #include <string.h>
@@ -18,30 +18,30 @@
18
18
  int p=0;
19
19
  char pb[5]={};
20
20
  char line[BUFSIZ];
21
- FILE *fp = fopen("jawiki-20211220-pages-articles-multistream1.xml", "r");
21
+ FILE *fp = fopen("jawikiの記事.xml", "r");
22
22
  char title[BUFSIZ];
23
23
 
24
24
  //FILE *gt=fopen("list_1.txt","r");
25
25
  FILE *fw = fopen("get_text_c.txt", "w");
26
-
26
+ if ((NULL == fp)||(NULL== fw )){
27
+ printf("abootしました。");
28
+ abort();//終了、ここがうまくいってないのか
29
+ $ brew install gdb}
27
30
  while (p = ftell(fp), fgets(line, BUFSIZ, fp)) {
28
- if ((NULL == fp)||(NULL== fw )){
31
+
29
- printf("aboooooooooooooooooooooooooooot");
30
- abort();//終了、ここがうまくいってない?
31
- }
32
32
 
33
- else if (strstr(line, "<page>")){
33
+ if (strstr(line, "<page>")){
34
34
  pb[0]=p;
35
35
  }
36
36
  else if (strstr(line, "</page>")){
37
- pb[1] = p - pb[0];
37
+ pb[1] = p - pb[0];
38
- fseek(fp,-pb[1],SEEK_CUR);
38
+ fseek(fp,-pb[1],SEEK_CUR);
39
- fprintf(stderr, "start=%d size=%d BUFSIZ=%d\n", pb[0], pb[1], BUFSIZ);
39
+ fprintf(stderr, "start=%d size=%d BUFSIZ=%d\n", pb[0], pb[1], BUFSIZ);
40
- // printf("%d",fp);
40
+ // printf("%d",fp);
41
- fgets(line,pb[1],fp);
41
+ fgets(line,pb[1],fp);
42
- //fwrite(pb, sizeof(size_t), 2, fw); // ...
42
+ //fwrite(pb, sizeof(size_t), 2, fw); // ...
43
- //fprintf(fw, "%hhd \t %hhd \n", pb[0], pb[1]); //... 名残
43
+ //fprintf(fw, "%hhd \t %hhd \n", pb[0], pb[1]); //... 名残
44
- fprintf(fw,"%s \n",line);
44
+ fprintf(fw,"%s \n",line);
45
45
  }
46
46
  }
47
47
 

2

ソースコードとエラーを修正しました。

2022/06/10 07:51

投稿

studyprg
studyprg

score42

test CHANGED
File without changes
test CHANGED
@@ -16,7 +16,7 @@
16
16
 
17
17
 
18
18
  int p=0;
19
- char pb[5]={ };
19
+ char pb[5]={};
20
20
  char line[BUFSIZ];
21
21
  FILE *fp = fopen("jawiki-20211220-pages-articles-multistream1.xml", "r");
22
22
  char title[BUFSIZ];
@@ -37,7 +37,7 @@
37
37
  pb[1] = p - pb[0];
38
38
  fseek(fp,-pb[1],SEEK_CUR);
39
39
  fprintf(stderr, "start=%d size=%d BUFSIZ=%d\n", pb[0], pb[1], BUFSIZ);
40
- printf("%d",fp);
40
+ // printf("%d",fp);
41
41
  fgets(line,pb[1],fp);
42
42
  //fwrite(pb, sizeof(size_t), 2, fw); // ...
43
43
  //fprintf(fw, "%hhd \t %hhd \n", pb[0], pb[1]); //... 名残
@@ -53,7 +53,9 @@
53
53
 
54
54
  次にエラーコードです。(すぐに表示されるので読み込んでいる気配がない。)
55
55
  ```error
56
+ % gcc -g Wiki_getter2_All.c -o get_all
56
- % ./get_all
57
+ % ./get_all
57
58
  zsh: segmentation fault ./get_all
59
+
58
60
  ```
59
61
 

1

ソース他の修正。

2022/06/10 07:31

投稿

studyprg
studyprg

score42

test CHANGED
File without changes
test CHANGED
@@ -16,9 +16,9 @@
16
16
 
17
17
 
18
18
  int p=0;
19
- char pb[5]={0,0,0,0,0};//初期化
19
+ char pb[5]={ };
20
20
  char line[BUFSIZ];
21
- FILE *fp = fopen("wikixml", "r");
21
+ FILE *fp = fopen("jawiki-20211220-pages-articles-multistream1.xml", "r");
22
22
  char title[BUFSIZ];
23
23
 
24
24
  //FILE *gt=fopen("list_1.txt","r");
@@ -27,28 +27,31 @@
27
27
  while (p = ftell(fp), fgets(line, BUFSIZ, fp)) {
28
28
  if ((NULL == fp)||(NULL== fw )){
29
29
  printf("aboooooooooooooooooooooooooooot");
30
- abort();
30
+ abort();//終了、ここがうまくいってない?
31
31
  }
32
32
 
33
33
  else if (strstr(line, "<page>")){
34
- p=pb[0];
34
+ pb[0]=p;
35
35
  }
36
36
  else if (strstr(line, "</page>")){
37
37
  pb[1] = p - pb[0];
38
38
  fseek(fp,-pb[1],SEEK_CUR);
39
+ fprintf(stderr, "start=%d size=%d BUFSIZ=%d\n", pb[0], pb[1], BUFSIZ);
40
+ printf("%d",fp);
39
41
  fgets(line,pb[1],fp);
40
- //fwrite(pb, sizeof(size_t), 2, fw);
42
+ //fwrite(pb, sizeof(size_t), 2, fw); // ...
41
- //fprintf(fw, "%hhd \t %hhd \n", pb[0], pb[1]);
43
+ //fprintf(fw, "%hhd \t %hhd \n", pb[0], pb[1]); //... 名残
42
- fprintf(fw,"%s \n",line);//ここが動いて欲しい
44
+ fprintf(fw,"%s \n",line);
43
45
  }
44
46
  }
45
47
 
46
48
  fclose(fw);
47
49
  fclose(fp);
48
50
  }
51
+
49
52
  ```
50
53
 
51
- 次にエラーコードです。
54
+ 次にエラーコードです。(すぐに表示されるので読み込んでいる気配がない。)
52
55
  ```error
53
56
  % ./get_all
54
57
  zsh: segmentation fault ./get_all