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

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

ただいまの
回答率

90.35%

  • Java

    14373questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • C#

    7666questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

辞書データを用いたシステムを作りたい

解決済

回答 3

投稿

  • 評価
  • クリップ 2
  • VIEW 695

ehyai

score 33

前提・実現したいこと

単語を入力すると、その単語の意味を表示するようなプログラムをC#やJAVAで構築したいと思い、それを実現させるために、Web上に存在する辞書データを利用して、そのデータを参考にして意味を表示させたいと考えております。Webで探してみたら、百科辞書というものが見つかりました。これは、LZHファイルというもので用意されているようなのですが、これを辞書データとして利用できるのではと思いました。
そこで尋ねたいことがあるのですが、C#かJAVAのどちらでもよいので、これらのデータの取り扱い方を教えていただけないでしょうか。もしこれらのデータがC#やJAVAでのプログラミングにおいて利用できないデータであるならば、この他に辞書データとして利用できそうなデータを知っておりましたら、教えていただけないでしょうか。
また、もしよろしければ、簡単なプログラムでいいので、こういうコードの書き方をすればこのデータのこの部分を参考にして表示できる、といったプログラムの書き方も教えてもらえないでしょうか。よろしくお願いします。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正、ベストアンサー選択の依頼

  • Zuishin

    2017/03/12 07:16

    百科辞書のサイトを読んでみましたが、管理人はなかなかの難物のようですね。パブリックドメインを標榜しているのに特定組織のアクセスや利用を禁じていたり、リンク承認には十万円の手数料を取っていたり、北方領土は領土と領海で保有する国を分けろと主張していたり、そのような政治的問題を、パブリックドメインを標榜して他者から無償譲渡された著作物を配布するサイトのトップに掲げていたり。規約が管理人の気分でいつどのように変わるか分からないので、利用は慎重になさった方がよろしいかと。

    キャンセル

  • ehyai

    2017/03/12 13:44

    アドバイスありがとうございます。確かに手数料十万円というのは変ですし、こういうところに政治問題について書かれているのは気になりますね。わかりました。利用する際には気を付けたいと思います。

    キャンセル

回答 3

checkベストアンサー

+4

Mac 上の ruby で作ってみました。

3 つのプログラムで構成しています。

  • lzh ファイルを download して、text ファイルをつくる。
  • text ファイルからインデックスをつくる。
  • 指定した単語の説明を表示する。
# brew install lha
# brew install nkf

# lzh ファイルをダウンロードする
system 'rm -fr lzh'
system 'mkdir lzh'
%w[a ka sa ta na ha ma ya ra wa].each do |name|
  system "curl http://pddlib.v.wol.ne.jp/japanese/#{name}.lzh -o lzh/#{name}.lzh"
end

# lzh を解凍する
system 'rm -fr txt'
system 'mkdir txt'
Dir.chdir 'txt'
Dir.glob('../lzh/*.lzh').each do |lzh|
  system "lha x --archive-kanji-code=sjis --system-kanji-code=utf8 #{lzh}"
end
Dir.chdir '..'

# 文字コードを utf8, 改行コードを LF, ファイル名の拡張子を .txt に変更する
Dir.glob('txt/*').each do |file|
  system "nkf -wLu #{file} >> 1.txt"
  system "mv 1.txt #{file}.txt"
  system "rm -f #{file}"
end

make_index.rb

# require 'json'

index = {}
prev_key = nil
Dir.glob('txt/*.txt') do |file|
  text = IO.readlines(file).map { |line| line.chop }

  text.each_with_index do |line, idx|
    next if line.length.zero? || "\t- ".index(line[0])

    key = line.sub(/\A★/, '').sub(/\A\[\d\]/, '')
    index[prev_key][-1] = "#{index[prev_key][-1]}:#{idx - 1}" unless prev_key.nil?
    prev_key = key

    index[key] ||= []
    index[key] << "#{file}:#{idx}"
  end
end
 # puts JSON.pretty_generate(index)
 # File.open('index.json', 'w') { |file| JSON.dump(index, file) }
 File.open('index.txt', 'w') do |file|
   index.each do |key, val|
     file.write("#{key}\t#{val.join(' ')}\n")
   end
 end

dic.rb

INDEX_FILE = 'index.txt'.freeze

def show_pos(item)
  pos = item.split(':')
  lines = IO.readlines(pos[0])
  s = pos[1].to_i
  e = pos.size == 3 ? pos[2].to_i : lines.size - 1
  puts '------------------'
  puts lines[s..e]
end

return if ARGV.size == 0

key = ARGV[0] + "\t"
results = File.readlines(INDEX_FILE).select { |line| line.start_with?(key) }
results.each do |line|
  line.split(/\t| /)[1..-1].each do |items|
    items.split(' ').each do |pos|
      show_pos(pos)
    end
  end
end

実行例

$ ruby dic.rb "あいあい"
------------------
★あいあい
    【アイアイ】
    ◇[英]aye-aye、[学]Daubentonia madagascariensis
    ○(1)[哺]霊長目(Primates)アイアイ科(Daubentoniidae)のサ
    ル。
     マダガスカル島にのみ生息。
     「指猿(ユビザル)」とも呼ぶ。
    ◎メガネザル(眼鏡猿)・キツネザル(狐猿)・ロリス(loris)な
    どの近縁種。
    ○(2)[楽]相田裕美作詞、宇野誠一郎作曲の童謡。
------------------
あいあい
    【娃娃】
    ◇[中]wawa(ワーワ)(1)(中国語で)赤ん坊。
    ○(2)(中国語で)人形。
    ◎洋娃娃(yangwawa):バービー人形。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2017/03/12 13:41

    回答してくださってありがとうございます。丁寧なプログラムのおかげで非常にわかりやすいです。もう一つだけ聞きたいことがあるのですが、自分はWindowsで、またrubyを利用したことはないのですが、C#やJAVAでも、そちらの教えていただいたようなやり方で、文法をそれぞれの様式に直してコードを書いたら機能しますでしょうか。

    キャンセル

  • 2017/03/12 15:38

    同様の処理を java や c または別の言語で書くことも可能と思います。
    mac なので、日本語コード、改行コードを変換してますが、windows 上なら、変換は不要かもしれません。
    テキストファイルをそのまま利用して検索、表示をしていますが、
    Dtabase (Mysql, sqlite3 など ...) に入れて検索するようにするのも良いと思います。

    郵便番号データをつかって、住所-郵便番号を検索する例が web 上でいくつか見つかります。
    そういったものが、どのようにデータを扱っているかも参考になるとおもいます。

    https://github.com/taroyabuki/webbook2/tree/master/src/09

    キャンセル

  • 2017/03/14 03:43

    再び回答してくださってありがとうございます。まだ解決したわけではありませんが、ベストアンサーに選ばせていただきました。そちらに教えていただいたコードをC#やJAVAで書けるか、試してみたいと思います。また、テキストファイルをそのまま利用するか、データベースを用いるかどうかはもう少し考えてみます。あと、データの扱い方に関して参考になりそうな例までも紹介してくださってありがとうございます。自分のシステムに活用できそうかはまだわかりませんが、心強いです。

    キャンセル

+3

百科辞書、なかなか面白いサイトですね。

さて、このサイトで配布しているファイルを利用してということでいいでしょうか。まず、配布されているLZH形式のファイルですが、サイトの説明にもある通り圧縮ファイルです(今時LZH形式を使うのも珍しいですが)。なので、まずはこのファイルを解凍しなければなりません。各種圧縮形式に対応したDLLが用意されているので、それらを利用して解凍すればよろしいでしょう。
続いて解凍して展開されたファイルを解析して辞書データにするという処理になると思います。中を見たところ、独特の形式(と言うか、本当に見た目重視に編集されている)なので、どういう風にしてデータに起こすかというのは考える必要があります。
後は、このデータをどう持つかを考える必要がありますかね(データベース化するかとか、独自の形式のファイルにするかとか)。

基本的には「テキストファイルを読み込んで、そのデータを加工する」になると思いますので、いかなる言語でもプログラムは組めると思います。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2017/03/12 13:35

    回答してくださってありがとうございます。LZHファイルをダウンロードしてみました。このファイルを、右クリックからの解凍を行うと、あ、あいか、あいた...といったファイルがありました。これらはInternet Explorerやメモ帳で開くと、単語とその意味が載せられていました。DLLというものについてよく知らないのですが、これで解凍は成功したといってよろしい感じでしょうか。あと、データベース化というのは、エクセルを利用して作成する感じでよろしいでしょうか。再び質問、申し訳ありません。

    キャンセル

  • 2017/03/12 23:27

    DLLとはある機能(今回で言うならば、圧縮ファイルの解凍)を他のプログラムでも利用できるようにまとめたファイルです(「Dynamic Link Library」の略です)。これを利用することで、圧縮ファイルの解凍部分を新規に作ること無く、プログラムに組み込めるようになります。
    ファイルの解凍と中のファイルの閲覧はできたようですね。
    データベース化ですが、このファイル(群)自体がある意味データベースですが、更に質問者さんの作ろうとしているプログラムで扱いやすくするといった意味で挙げました。エクセルのような表形式をイメージしてもらうでもいいと思います(本来なら、MSオフィスで言うならば、Accessがデータベースソフトですが)が、katoyさんが挙げてくださったMySQLやSQLite3と言ったデータベースソフトを利用するのも手です。
    (どちらかと言うと、後者ですかね。エクセルでもデータ作成はできますが)

    キャンセル

  • 2017/03/14 03:44

    再び回答してくださってありがとうございます。そちらの丁寧な説明のおかげでDLLについて理解できました。エクセルだけでなく、MySQLやSQLite3などのデータベースソフトというものがあったのですね。データベース化を行うことになった場合は参考にしてみたいと思います。

    キャンセル

+1

#encoding : utf-8

def index(path)
  Dir.glob("#{path}/*").each do |folder|
    Dir.glob("#{folder}/*.txt").each do |file|
      array = []
      File.open(file) do |f|
        f.each_line do |line|
          array << line
        end
      end
      array.shift(5)
      array.pop
      str = ""
      array.each do |element|
        element = element.gsub("\n", "<-|->")
        unless element.include?("\t")
          element = "\n" + element
        end
        str += element
      end
      str.slice!(0)
      File.open("index.txt", "a") do |output|
        output.puts(str)
      end
    end
  end
end

def search(path, word)
  File.open(path) do |f|
    f.each_line do |line|
      comp = 0
      line.gsub!("<-|->", "\n").each_line.with_index do |l, i|
        if i == 0 && l.include?(word.encode("windows-31J"))
          comp = 1
          puts "-----------------------------"
        end
        if comp == 1
          puts l
        end
      end
    end
  end
end

print "検索する文字列を入力してください:"
input = gets.chomp
search("index.txt", input)
検索する文字列を入力してください:なぽりたん
-----------------------------
[1]なぽりたん
        【ナポリタン】
        ◇[フ]napolitain
        ○(1)[料]トマトを使ってイタリアの都市ナポリ風に味付けを
        した料理。
        ○(2)[料](特に)スパゲティ(spaghetti)をベーコン・マッシュ
        ルームなどと炒(イタ)めて、トマトピューレをからめた料理。
         参照⇒なぽれたーに(ナポレターニ)(2)

-----------------------------
[2]なぽりたん
        【ナポリタン】
        ◇[英]Neapolitan(ニーポリタン)
        ○(1)[形]ナポリの。
        ○(2)[名]ナポリの人。ナポリ出身の人・ナポリ在住の人。
         イタリア語では男性を「ナポレターノ(napoletano)」、女性を
        「ナポレターナ(napoletana)」と呼ぶ。
        ○(3)[食](neapolitan)⇒なぽりたんあいすくりーむ(ナポリタ
        ンアイスクリーム,ナポリタン・アイスクリーム)

-----------------------------
なぽりたんあいすくりーむ
        【ナポリタンアイスクリーム】
        【ナポリタン・アイスクリーム】
        ◇[英]neapolitan ice cream
        ○[食]いろいろな味と色をつけて層状にしたアイスクリーム。
         参照⇒りっぷる(リップル)(4)
using System;

namespace index1
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.Write("検索する文字列を入力してください:");
            string word = Console.ReadLine();

            System.IO.StreamReader sr = new System.IO.StreamReader("index.txt", System.Text.Encoding.Default);


            while(sr.Peek() >= 0)
            {

                string line = sr.ReadLine().Replace("<-|->", "\n").ToString();
                if (line.Contains(word))
                {
                    Console.WriteLine("-----------------------------");
                    Console.WriteLine(line);
                }
            }
            sr.Close();
            Console.ReadKey();

        }
    }
}


改良版

def search(word)
  word = word.chomp.encode("windows-31J")
  array = []
  File.open("index.txt", "r") do |f|
    f.each_line do |line|
      flag = 0
      line.gsub("<-|->", "\n").each_line.with_index do |element, i|
        if i == 0 && element =~ /\A(#{"★".encode("windows-31J")}|\[\d{1}\])#{word}\Z/
          flag = 1
        end
      end
      if flag == 1
        array << line.gsub("<-|->", "\n")
      end
    end
  end
  return array
end

search(ARGV[0]).each do |s|
  puts "-----------------------------"
  puts s
end


実行結果例

-----------------------------
[1]なぽりたん
        【ナポリタン】
        ◇[フ]napolitain
        ○(1)[料]トマトを使ってイタリアの都市ナポリ風に味付けを
        した料理。
        ○(2)[料](特に)スパゲティ(spaghetti)をベーコン・マッシュ
        ルームなどと炒(イタ)めて、トマトピューレをからめた料理。
         参照⇒なぽれたーに(ナポレターニ)(2)

-----------------------------
[2]なぽりたん
        【ナポリタン】
        ◇[英]Neapolitan(ニーポリタン)(1)[形]ナポリの。
        ○(2)[名]ナポリの人。ナポリ出身の人・ナポリ在住の人。
         イタリア語では男性を「ナポレターノ(napoletano)」、女性を
        「ナポレターナ(napoletana)」と呼ぶ。
        ○(3)[食](neapolitan)⇒なぽりたんあいすくりーむ(ナポリタ
        ンアイスクリーム,ナポリタン・アイスクリーム)


素人ながら考えてみました。
文字列に特定の語が含まれるかだけで表示しているので微妙です。
Lhaplusで解凍してRubyで加工しました。
加工の内容
1.「index」というフォルダを1つ作ってその中に解凍してできたフォルダをいれる。
2.「index」の中にあるファイルの拡張子を全て「.txt」にする。
C#はこちらのサイトを参考にしました。
StreamReader でファイルを 1 行ずつ読み込む
文字列に特定の文字列が含まれているかを調べるには?(Contains編)[2.0のみ、C#、VB]

補足

def index(path)                                #この処理の名前。何でもよい。
  Dir.glob("#{path}/*").each do |folder|       #indexフォルダの中にあるフォルダを全て取得して配列にする。できた配列から1つずつ要素を取り出してfolderに入れる。
    Dir.glob("#{folder}/*.txt").each do |file| #folderの中にあるテキストファイルを全て取得して配列にする。できた配列から1つずつ要素を取り出してfileに入れる。
      array = []                               #配列を用意。
      File.open(file) do |f|                   #fileを開きます。
        f.each_line do |line|                  #fileを一行ずつ読み込んでlineに入れる。
          array << line                        #lineをarrayに入れる。(文字コードのエラーでsplitが使えなかったのでこんなことをしています。)
        end
      end
      array.shift(5)                           #配列の前から5つまでの要素を削除(いらないので)
      array.pop                                #配列の最後の要素を削除(いらないので)
      str = ""                                 #文字列を入れるのに使う。
      array.each do |element|                  #arrayの中身を一つずつ取り出してelementに入れる。
        element = element.gsub("\n", "<-|->")  #elementの文字をgsubで置き換える。(改行文字を"<-|->"に置き換えている。この文字列に特に意味はない。)
        unless element.include?("\t")          #elementが改行文字を含まない場合は(unlessはifの逆の意味 「if a != 1」は「unless a == 1」と同じ意味)
          element = "\n" + element             #elementの先頭に改行文字を足す。(こうなる場合は項目の最初だけ)
        end
        str += element                         #strにelementを足す。
      end
      str.slice!(0)                            #strの先頭の改行文字を取り除く。
      File.open("index.txt", "a") do |output|  #index.txtを開く/作る
        output.puts(str)                       #index.txtにstrの内容を書き込む。
      end
    end
  end
end

=begin
簡単に言うとindexフォルダの中にあるテキストファイルをすべて連結した
1つのテキストファイルを作るということをしている。
=end


忘れていましたが、「def index」を使う前に

Dir.glob("index/*").each do |folder|
  Dir.glob("#{folder}/*").each do |file|
    File.rename(file, "#{file}.txt")
  end
end


みたいな感じで「index」フォルダの中にある拡張子のない
テキストファイルに拡張子をつけるということをしていました。

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2017/03/17 03:38

    回答してくださってありがとうございます。C#で百貨辞書のデータを利用したいと考えていたので、C#のコードも教えていただいて、本当にありがたいです。少しだけ聞きたいことがあるのですが、よろしいでしょうか。自分でindexフォルダを作り、その中に解凍してできたフォルダを全部入れるというのはわかりました。解凍してできたフォルダは、例えばあ行の場合「a」という名前のフォルダがあり、その中に「あ」「あいか」「あいた」...といったフォルダがあります。indexフォルダに入れるのは、「a」のフォルダごと入れるのか、それとも「あ」「あいか」「あいた」の方のフォルダだけを入れるのか、どちらでしょうか。また、拡張子を「.txt」に変更するのは、「あ」「あいか」「あいた」の方でよろしいでしょうか。よろしくお願いします。

    キャンセル

  • 2017/03/17 12:02 編集

    ローマ字になっているフォルダごと入れてください。
    「あ」「あいか」「あいた」の方の拡張子を「.txt」に変更します。

    キャンセル

  • 2017/03/20 05:16

    ありがとうございます。indexフォルダを作成した後、デバッグを実行してみたところ、「System.IO.StreamReader sr = new System.IO.StreamReader("index.txt", System.Text.Encoding.Default);」のところでエラーが発生してしまい、「FileNotFoundExceptionはハンドルされませんでした。」と表示されます。おそらくシステムがindexフォルダが見つけられないために、このようなエラーが発生してしまうのだと思われます。indexフォルダをどこに置けばよいのか検討しているところですが、現時点ではわかりかねない状態ですね。それとも、別の部分に問題があったりするのでしょうか。

    キャンセル

  • 2017/03/20 23:47 編集

    私の説明が不味くてすみません。
    1.indexフォルダを作る。
    2.このフォルダをRubyの「def index」を使って加工して、「index.txt」を作る。
    3.「index.txt」を対象にRubyの「def search」やC#のプログラムを使って検索を行う。
    こういった流れになっています。
    現在は1ができている状態で、まだ「index.txt」が存在しないのでehyai様がおっしゃる
    エラーが発生しています。正常なことなのでご安心ください。
    Rubyのプログラムを動かすのは手間だと思うのでこちらに加工済みのファイルを用意しました。
    使用については自己責任でお願いします。
    https://drive.google.com/open?id=0B5ATtnO9WMT0RkhVS1BPT0FUWjA
    Rubyの「def index」については改めて何をやっているのかコメントを書かせていただきました。

    キャンセル

  • 2017/03/25 00:50

    私のために加工済みのファイルまで用意してくださって、ありがとうございます。返事が遅れてしまい、申し訳ありません。上の補足のRubyのコードは、上がindex.txtにindexフォルダ内のファイルの内容を書き込むコード、下がindexフォルダ内のファイルにtxtの拡張子を付けるコードということですね。つまり、h_aさんの用意してくださった加工済みのindex.txtファイルがあれば、補足の二つのコードは書かなくてよいという感じでよろしいでしょうか。ただ、indexファイルにindex.txtを入れて実行してみたのですが、やはり「FileNotFoundExceptionはハンドルされませんでした。」というエラーが表示されてしまいます。indexフォルダはCファイルの直下に置いて試したのですが、これが正しくindex.txtを読み込めない理由なのでしょうか。デスクトップにindexフォルダを置いたり、index.txtのみを置いたりして試したのですが、上手くいきませんでした。あと、もう一つだけ尋ねさせていただきたいことがあるのですが、C#のコードと改良版とあるRubyのコードの内容は同じでよろしかったですよね...?

    キャンセル

  • 2017/03/25 04:00 編集

    1.補足の2つのコードは書かなくてよいか?
     その通りです。書かなくて大丈夫です。

    2.エラーがでて動きません。
     私はVisualStudioを使っているのでそれ以外の状況については分かりませんが、VisualStudio2017の場合、Visual Studio 2017->Projects->(対象のプロジェクトのフォルダ)->(対処のプロジェクトと同じ名前のフォルダ)->bin->debug(もしくはrelease)フォルダの中にindex.txtを入れてもらえば動くと思います。
    とりあえず、前と同じ
    https://drive.google.com/open?id=0B5ATtnO9WMT0RkhVS1BPT0FUWjA
    このURLにコンパイルしたC#のプログラムを入れてみました。

    3.C#のコードとRubyの改良版のコードは同じ内容(同じ動きをする)か
     別物です。(異なった結果になります。)
     index.txtには
     「なぽりたん<-|->\tぱすたの一種<-|->\t関連=>麵料理, らーめん」
     みたいな感じで各単語が記されています。
     今、検索したい文字列が「らーめん」だったとします。C#のプログラムは「なぽりたん<-|->\tぱすたの一種<-|->\t関連=>麵料理, らーめん」という文字列を対象に「らーめん」が含まれるかを調べます。Rubyの改良版のほうは、「なぽりたん」という文字列を対象に「らーめん」が含まれるかを調べます。C#の方は単語の説明に調べたい言葉があった場合も表示してしまいます。(containsで調べているだけなので「あ」とか「み」など1文字の場合はその1文字を含む全単語を表示します。)

    最後に今更ですが私はC#の勉強を最近始めたばかりなので現在は分からないことのほうが多い状況です。
    ですのであんまり期待しないでくださいね。

    index.txtを使うと文字コードのエラーが発生します。
    私のRubyのコードやC#のコードはエラーを回避する書き方がしてあるので
    そのまま試すだけなら大丈夫だと思います。
    このエラーを解決する方法は調査中です。

    キャンセル

  • 2017/03/27 01:44

    index.txtをプロジェクトの中に入れる必要があったのですね。h_aさんのおかげで、エラーなく、入力した単語の意味をindex.txt中の百科辞書のデータを用いて表示させることができました。h_aさんのおっしゃる通り、確かに説明に入力した言葉の書かれてある単語まで表示されてしまいますし、「森」などの短い単語を入力して検索した場合はあまりに大量の「説明文に森を含んだ」単語が表示されるためにエラーが発生してしまいますね。h_aさんのRuby改良版のように、本当に検索したい単語のみを表示するプログラムへと改善できるよう努力したいと思います。本当にありがとうございました。

    キャンセル

  • 2017/03/27 17:01 編集

    いえいえ。こちらこそありがとうございました。
    https://drive.google.com/open?id=0B5ATtnO9WMT0RkhVS1BPT0FUWjA
    こちらのファイルは削除しておきます。

    キャンセル

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

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

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

  • Java

    14373questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • C#

    7666questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。