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

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

ただいまの
回答率

87.49%

英語で単語を入力しても検索が出来るように改良したいです。

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 1,111
退会済みユーザー

退会済みユーザー

C言語のアリゴリズムです。日本語を入力して英語にすることは出来るのですが、英語を入力して日本語に逆引きしたいです。色んな方法でソースコードを改良し、試したましたが余りいい結果が得られませんでした。訳語候補が「/」で区切られていたり、複数の単語からなるものは「_」で連結されたりしていまして読み込みの際に上手くいかなかったりしました。それで、一から新しい考え方と正しいソースコードが知りたいです。その方法を教えて頂きたいです。txtファイルの中だけの単語から読み込んでいます。
#include <stdio\.h>
#include <string\.h>
#include <math\.h>

#define SIZE 2000
#define DIM 200
#define N 200

char words\[DIM\]\[256\];
char eng\[DIM\]\[256\];
double sizes\[DIM\];
double sv\[DIM\]\[DIM\];
int count;
double cosine\( int i, int j \);
int readfile\( char\* path \);

/\*
 コンパイル方法:
 gcc -DN=200 -o MT MT\.c -lm
 \*/

int main\(void\)
{
    // 日本語単語を入力すると、英語訳語候補を出力する
    double th = 0\.6; /\* 類似度閾値 \*/
    readfile\( "\./exv_animals\.txt" \);
    char input\[256\];
    while\(1\){
        printf\("日本語で動物名を入力してください。: "\);
        scanf\("%s", input\);
        if \( strcmp\( input, "q" \) == 0 \){ break; }
        printf\("入力名: %s ", input\);
        int i, j;
        int check = 0;
        for \( i = 0; i < count; i\+\+ \){
            check = 0;
            if \( strcmp\( input, words\[i\] \) == 0 \){
                printf\("==> %s\n", eng\[i\] \);
                check = 1;
            }
            if \( check == 1 \){
                int rcount = 0;
                for \( j = 0; j < count; j\+\+ \){
                    if \( i == j \){ continue; }
                    double sim = cosine\( i, j \);
                    if \( sim >= th \){
                        printf\("\[%s\]\t\[%s\]\t%\.3lf\n", words\[j\], eng\[j\], sim\);
                        rcount\+\+;
                        if \( rcount == 10 \){ break; }
                    }
                }
            }
        }
        printf\("\n"\);
    }
    
}

/\* ファイルの読み込み \*/
int readfile\( char\* path \)
{
    FILE\* fp = fopen\( path, "r" \);
    if \( fp == NULL \){
        printf\("%s: file open error\.\n", path \);
        return -1;
    }
    char s\[10000\];
    char sep\[\] = " ";
    count = 0;
    int n = 0;
    double size=0\.0;
    while\( fgets\( s, sizeof\(s\), fp \) != NULL \){
        char \*tok = strtok\( s, sep \);
        int i = 0;
        while\( tok != NULL \){
            if \( i == 0 \){ strcpy\(words\[n\], \(const char\*\)tok\); }
            if \( i == N\+1 \){
                sscanf\(\(const char\*\)tok, "%lf", &sizes\[n\]\);
                //printf\("%\.3lf, %s\n", sizes\[n\], \(const char\*\)tok\);
            }
            if \( i == N\+2 \){
                strcpy\(eng\[n\], \(const char\*\)tok\);
                int l = strlen\(eng\[n\]\);
                eng\[n\]\[l-1\] = '\0';
            }
            else{
                sscanf\( \(const char\*\)tok, "%lf", &sv\[n\]\[i-1\] \);
            }
            tok = strtok\( NULL, sep \);
            i\+\+;
        }
        n\+\+;
        count\+\+;
    }
    fclose\(fp\);
    return 1;
}

double cosine\( int i, int j \)
{
    double sim = 0\.0;
    double sz1 = sizes\[i\];
    double sz2 = sizes\[j\];
    int k;
    for \( k = 0; k < N; k\+\+ \){
        sim \+= sv\[i\]\[k\] \* sv\[j\]\[k\];
    }
    printf\("%\.3lf, %\.3lf, %\.3lf\n", sim, sz1, sz2\);
    sim = sim / \( sz1 \* sz2 \);
    return sim;
}
exv_animals\.txtの中身です。
犬 0\.812 1\.472 -2\.221 3\.249 -2\.881 -1\.361 3\.433 -0\.240 0\.425 -1\.432 0\.210 0\.465 0\.610 -0\.557 2\.772 -0\.469 -0\.361 1\.357 2\.443 -1\.563 -0\.462 -0\.950 -1\.372 -1\.788 2\.058 -0\.467 -1\.550 0\.727 0\.459 0\.011 2\.628 -2\.646 -0\.650 -0\.038 -2\.246 -0\.387 0\.409 -0\.117 0\.799 -1\.502 0\.102 0\.635 -3\.145 -4\.128 -1\.341 -0\.011 1\.891 2\.859 -3\.047 1\.019 2\.002 -4\.149 2\.106 -1\.748 0\.872 4\.016 -1\.096 -0\.473 0\.236 -2\.707 -1\.317 0\.444 2\.840 -1\.408 2\.380 -1\.567 1\.541 3\.661 0\.905 0\.531 0\.309 2\.838 -1\.565 -3\.284 -1\.011 -0\.175 2\.685 0\.675 -0\.160 -2\.178 2\.183 1\.849 -3\.328 0\.812 1\.274 1\.373 -0\.409 2\.728 -1\.709 1\.186 3\.556 -1\.861 1\.037 0\.929 4\.090 1\.923 0\.184 -0\.917 0\.641 1\.444 -0\.159 -0\.709 0\.536 -0\.219 1\.738 1\.032 1\.651 -0\.691 -1\.464 -1\.853 2\.699 -1\.877 0\.729 1\.473 -0\.463 2\.214 3\.308 -3\.059 0\.940 1\.816 -0\.361 -3\.729 4\.298 -0\.345 -2\.860 -2\.560 4\.291 -1\.150 1\.891 -1\.275 0\.879 0\.305 0\.629 -0\.593 3\.108 0\.057 -0\.424 0\.530 -0\.982 1\.095 -1\.330 2\.820 -1\.824 -1\.933 -2\.049 0\.038 0\.633 -4\.914 0\.971 0\.623 -1\.487 -0\.266 -1\.472 0\.564 1\.976 0\.698 -0\.591 0\.953 1\.351 -0\.667 5\.556 2\.483 1\.124 0\.399 0\.527 0\.971 2\.901 -0\.717 -1\.573 1\.947 -1\.244 -2\.367 0\.085 -1\.179 1\.645 -2\.796 0\.430 0\.616 1\.947 0\.859 2\.694 -1\.231 -0\.872 -3\.627 -3\.140 0\.510 0\.931 -0\.172 -0\.030 -1\.554 -2\.286 0\.975 3\.240 -2\.114 0\.052 0\.555 3\.234 -1\.966 -1\.021 -0\.802 26\.609 dog
牛 0\.375 -0\.224 -1\.080 1\.432 0\.462 -0\.123 0\.754 -0\.054 2\.271 -0\.417 0\.137 1\.571 -0\.209 0\.599 0\.997 0\.505 0\.238 2\.033 2\.714 -2\.575 -2\.410 -0\.162 -1\.019 -3\.306 1\.528 0\.823 2\.800 2\.928 0\.622 0\.017 0\.096 -0\.729 -3\.745 -0\.660 -0\.109 0\.222 2\.469 -2\.065 0\.459 -1\.502 0\.604 4\.011 0\.807 0\.039 -1\.129 -0\.979 -0\.222 1\.139 -0\.538 -0\.751 1\.180 -2\.987 1\.020 0\.925 1\.622 0\.788 -0\.907 0\.454 -1\.525 -1\.905 0\.865 -1\.311 0\.936 0\.258 2\.375 -0\.773 -1\.405 2\.355 0\.112 -0\.241 0\.264 1\.469 -0\.606 -3\.029 2\.170 0\.371 0\.141 -0\.120 -0\.183 -0\.960 -1\.166 1\.787 -2\.459 0\.108 1\.250 -0\.795 0\.245 1\.559 -3\.031 -0\.423 2\.414 0\.028 2\.510 0\.396 1\.152 0\.549 1\.203 3\.079 2\.280 0\.462 0\.240 -1\.844 0\.084 -1\.201 -0\.670 1\.656 2\.658 -4\.303 -2\.689 -0\.434 2\.695 0\.884 -0\.471 0\.027 0\.995 0\.799 -1\.095 -3\.325 -1\.016 2\.218 1\.765 -3\.149 1\.604 0\.299 -0\.865 -2\.435 -0\.885 -2\.454 0\.565 -0\.234 0\.724 0\.146 0\.349 -1\.368 0\.749 0\.049 -1\.202 1\.442 -1\.367 0\.597 -0\.809 0\.076 -1\.806 -2\.504 -2\.485 0\.135 2\.199 -1\.339 -0\.769 2\.270 1\.255 -1\.351 -1\.093 1\.918 1\.466 -1\.094 -1\.170 -0\.434 -0\.202 -0\.780 1\.588 2\.384 0\.757 -1\.228 -0\.538 1\.378 -1\.263 -2\.130 -1\.343 1\.022 -1\.351 -1\.166 0\.494 -3\.218 2\.064 1\.838 -1\.735 -1\.375 0\.490 1\.345 1\.097 -0\.636 -0\.636 0\.273 -1\.214 0\.744 0\.426 2\.190 -1\.452 0\.910 -2\.682 1\.985 1\.730 -0\.116 -0\.314 1\.606 2\.550 -1\.868 -1\.495 0\.297 21\.732 cattle/bull/ox/cow
猪 2\.184 0\.879 -2\.821 0\.895 0\.566 -1\.491 0\.900 -0\.096 1\.693 -1\.248 0\.129 0\.131 -0\.107 0\.762 -1\.224 0\.732 3\.362 2\.740 0\.268 -0\.366 -1\.054 -0\.338 -0\.440 -2\.950 0\.174 -0\.806 2\.972 2\.067 1\.729 -0\.472 -0\.191 -1\.078 -2\.925 0\.451 -0\.087 1\.461 1\.567 -1\.669 -0\.269 -2\.142 2\.872 1\.423 -0\.944 -0\.259 1\.271 -2\.567 -0\.011 1\.175 -0\.541 0\.129 1\.465 -3\.364 1\.776 1\.264 -1\.854 0\.174 -1\.087 1\.187 0\.112 0\.034 1\.483 -1\.207 -0\.948 -0\.301 0\.720 0\.308 -0\.861 0\.082 -0\.035 0\.512 -0\.125 2\.395 1\.054 -2\.454 -0\.142 0\.011 -0\.466 1\.106 -0\.330 -0\.541 -0\.026 0\.110 -1\.810 1\.489 2\.966 1\.810 1\.164 0\.382 0\.126 -0\.027 2\.518 0\.067 2\.170 -0\.949 1\.000 0\.869 -0\.524 2\.347 -0\.236 -1\.427 -0\.445 -0\.457 2\.864 -2\.115 -1\.087 2\.818 0\.801 -1\.949 -0\.981 -0\.609 2\.436 0\.375 -0\.397 0\.106 0\.174 1\.511 0\.682 -1\.826 2\.511 0\.574 0\.692 1\.006 -0\.082 -0\.700 -1\.517 -1\.843 1\.838 -1\.891 1\.738 -1\.160 0\.765 -0\.360 2\.746 -0\.681 2\.210 0\.112 -1\.585 1\.415 -1\.293 0\.840 -1\.159 0\.636 -0\.602 -1\.238 -2\.561 -0\.025 1\.520 0\.249 -0\.572 2\.009 1\.566 -0\.543 0\.562 1\.591 1\.587 0\.568 0\.398 -0\.954 0\.464 0\.158 2\.244 0\.988 -0\.858 0\.084 0\.122 1\.334 -2\.765 -0\.630 -0\.249 2\.094 -1\.475 0\.914 -0\.123 -1\.725 1\.866 -1\.341 -0\.519 -0\.856 0\.793 0\.320 0\.510 -2\.182 0\.962 0\.765 -0\.176 1\.550 0\.195 1\.684 -0\.963 1\.092 0\.644 2\.803 1\.957 1\.118 -0\.965 0\.964 0\.234 1\.568 -2\.743 -0\.565 19\.666 wild_pig
鴨 -0\.864 -0\.834 -1\.071 1\.142 -0\.718 -1\.659 -2\.888 -0\.402 -0\.687 -1\.153 0\.238 -1\.547 -0\.152 0\.482 1\.914 0\.326 -0\.165 1\.695 2\.142 -0\.735 -0\.723 0\.692 1\.324 -0\.456 -1\.045 -1\.016 2\.108 1\.676 -1\.466 -0\.642 1\.467 -0\.536 -1\.495 1\.145 0\.762 0\.254 0\.770 -0\.465 -0\.827 -1\.778 0\.652 -0\.060 -0\.659 1\.542 1\.109 -1\.943 0\.619 0\.160 -0\.377 0\.512 0\.752 -1\.799 -0\.183 -0\.710 1\.064 1\.073 -1\.018 -0\.907 0\.787 -2\.305 -0\.835 -0\.196 -1\.949 -1\.037 -0\.135 0\.178 0\.086 3\.238 -0\.237 -1\.450 1\.129 0\.731 -1\.696 -0\.936 1\.273 -0\.195 -2\.977 1\.857 0\.590 -0\.253 0\.539 0\.142 -0\.430 1\.803 0\.353 0\.713 -0\.021 -1\.736 1\.102 -0\.454 0\.473 -0\.010 1\.759 -0\.947 1\.500 0\.319 1\.174 0\.577 -0\.373 -3\.681 -0\.658 -0\.334 0\.742 -1\.996 2\.491 1\.789 0\.554 0\.828 0\.571 1\.984 2\.725 1\.569 -0\.762 1\.231 1\.169 -0\.822 0\.192 -1\.892 0\.245 -1\.371 -0\.983 -1\.592 0\.443 0\.914 0\.476 -0\.384 2\.341 -0\.189 -1\.138 0\.732 1\.609 0\.241 0\.655 -1\.004 -0\.853 0\.394 1\.457 2\.543 -0\.651 0\.326 0\.258 2\.534 1\.363 -0\.285 -1\.974 0\.862 -0\.460 -2\.448 0\.818 -0\.014 0\.625 -0\.838 1\.282 1\.218 -1\.263 0\.780 1\.351 -0\.170 -1\.329 -0\.410 1\.589 3\.300 0\.260 0\.387 -1\.898 1\.159 -3\.470 -1\.603 -1\.778 -0\.941 -1\.222 2\.248 2\.104 -0\.141 1\.235 0\.126 2\.290 -1\.288 1\.335 -1\.551 3\.533 -3\.657 -0\.658 1\.716 -0\.990 1\.984 0\.943 3\.860 -0\.610 1\.722 -3\.276 2\.515 1\.326 -1\.807 0\.202 0\.271 2\.796 0\.937 -2\.654 -0\.471 19\.969 wild_duck/drake
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

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

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

check解決した方法

0

解決しました。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

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

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

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 87.49%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

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