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

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

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

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

2回答

424閲覧

rubyのincludeについて

kamatmt

総合スコア25

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2017/08/28 06:59

編集2017/08/28 17:29

rubyのinclude?(String)メソッドについての質問です。
include?(String)は指定の文字列を含む場合にtrueかfalseで返すと認識でいますが、完全に一致しないとtrueが返ってこない状況に困っています。
このコードの前にはファイル読み込み等を行っています。
ある文章を形態素解析をし、形態素解析した単語(名詞のみ)と別のファイルに用意した単語を比較するプログラムを書いています。形態素解析した文章にはどの文章の単語かわかるように配列に保管されています。

例えば、word[0][1][2]は「テラテイル」。kei[0][1][2]は「テラ\n」

ruby

1 word=[] 2 for i in 0..t.length-1 do #tには文章 3 word[i] = [] 4 for j in 0..t[i].length-1 do 5 word[i].push(hinsi(t[i][j]))#hinsiは形態素解析,wordには形態素解析の結果 6 end 7 end 8# 9p word[0] 10p word[0][1][2] 11p kei[0][1][2] 12p word[0][1][2].include?(kei[0][1][2].chomp)

出力結果
"[["a","b","c"],["d","e","テラテイル"],["f"],[],["g","h"]]"
"テラテイル"
"テラ\n"
false

開発環境はruby2.1.8 unixです。
原因と解決方法をよろしくお願いします。

変更点
ソースコードの一部を抜粋しました。分かりづらくなって申し訳ないです。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ファイルの読込みや形態解析はできないので、次のスクリプトで検証しました。

ruby

1#!/usr/bin/env ruby 2# -*- encoding:utf-8 -*- 3 4word = [[["a","b","c"],["d","e","テラテイル"],["f"],[],["g","h"]]] 5kei = [[[],[[],[],[]]]] 6kei[0][1][2] = "テラ\n" 7 8p word[0] 9p word[0][1][2] 10p kei[0][1][2] 11p word[0][1][2].include?(kei[0][1][2].chomp) 12

上記の実行結果は次の通り問題なくtrueを得られました。

[["a", "b", "c"], ["d", "e", "テラテイル"], ["f"], [], ["g", "h"]] "テラテイル" "テラ\n" true

$ ruby --version
ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-darwin16]

なのでコード自体は問題ないようです。ただ、1点気になるところが(単なる掲載ミスなら問題なし)。それは、
p word[0]の出力が、こちらではArrayクラスですが、

"[["a","b","c"],["d","e","テラテイル"],["f"],[],["g","h"]]"

とStringクラスらしき出力結果を掲載している点です。

もしword[0]がStringなら、word[0][1]は2文字目、word[0][1][2]はnilになってしまいます。

投稿2017/09/04 13:42

NCC1701

総合スコア1680

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

普通に変数に文字列を入れてみると正常に動作するのですが...

irb(main):001:0> a = "テラテイル" => "テラテイル" irb(main):002:0> b = "テラ\n" => "テラ\n" irb(main):003:0> p a.include?(b.chomp!) true => true

p a[0][1][2]..include?(b[0][1][2].chomp!)や、出力結果のfalesに誤字・脱字が見られるので、もういちどソースコードと出力結果を正確にコピーして貼り付けてください。

投稿2017/08/28 07:25

programming

総合スコア476

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kamatmt

2017/08/28 08:10

自分も普通に変数に文字列を入れて試してみると正常に動作できるのですが、自分が書いているソースコードに入れると正常にいかず、考えられる原因もわからなく困っています。これは全コード500行以上の一部なのですがすべてのせるべきですか?
programming

2017/08/28 08:16

いいえ、抜粋元のコードが大きいならば、一部で構いません。 "\"が全角文字であったり、または他の処理が原因かもしれないと思ったので。 変数では試されたということで、失礼しました。
otn

2017/08/28 12:45

問題の発生に関係ない部分を削除して、問題が発生する最小限のコード(10行未満が希望)を載せてください。
kamatmt

2017/08/29 03:13

コードの一部を削除しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問