[#6219] Ruby連載 第4話 — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

32 messages 1998/02/04
[#6221] Re: Ruby連載 第4話 — Shin-ichiro HARA <sinara@...> 1998/02/04

原です。

[#6224] Re: Ruby連載 第4話 — Yasunari Momoi <conan@...> 1998/02/04

ももちゃん@あるもにこすです.

[#6225] Re: Ruby連載 第4話 — matz@... (Yukihiro Matsumoto) 1998/02/04

まつもと ゆきひろです

[#6249] Re: i++ — 助田 雅紀 <masaki.suketa@...>

助田です。

33 messages 1998/02/04
[#6252] Re: i++ — gotoken@... (GOTO Kentaro) 1998/02/05

ことけんです

[#6255] Re: i++ — matz@... (Yukihiro Matsumoto) 1998/02/05

まつもと ゆきひろです

[#6260] Re: i++ — Yuji Shigehiro <sigehiro@...> 1998/02/05

しげひろです.

[#6314] RE: ruby's design policy (Re: I'd like to subscr ibe this ML) — 助田 雅紀 <masaki.suketa@...>

オブジェクト指向周辺をぶらぶらしている助田です。

11 messages 1998/02/06

[#6333] ruby 流に添削して下さい — nkon@...2.3web.ne.jp

13 messages 1998/02/07
[#6335] Re: ruby 流に添削して下さい — OZAWA Sakuro <crouton@...> 1998/02/07

さくです.

[#6372] ruby 1.1b7 released — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

24 messages 1998/02/10
[#6402] parsedate (Re: ruby 1.1b7 released) — WATANABE Hirofumi <watanabe@...> 1998/02/13

わたなべです.

[#6405] Re: parsedate (Re: ruby 1.1b7 released) — Tadayoshi Funaba <tadf@...> 1998/02/13

ふなばです。

[#6407] Re: parsedate (Re: ruby 1.1b7 released) — matz@... (Yukihiro Matsumoto) 1998/02/13

まつもと ゆきひろです

[#6373] call for scripts — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

133 messages 1998/02/10
[#6414] Re: call for scripts — Terutuoshi Kaneshiro <k-teru@...06.odn.ne.jp> 1998/02/14

金城です.

[#6428] Re: call for scripts — matz@... (Yukihiro Matsumoto) 1998/02/16

まつもと ゆきひろです

[#6448] Re: call for scripts — Terutuoshi Kaneshiro <k-teru@...06.odn.ne.jp> 1998/02/16

金城です.

[#6452] Re: call for scripts — matz@... (Yukihiro Matsumoto) 1998/02/17

まつもと ゆきひろです

[#6481] Re: call for scripts — Kikutani Makoto <kikutani@...> 1998/02/17

きくたに@ぷ〜たろ〜です。

[#6483] Re: call for scripts — OZAWA Sakuro <crouton@...> 1998/02/17

さくです.

[#6495] Re: call for scripts — WATANABE Hirofumi <watanabe@...> 1998/02/18

わたなべです.

[#6416] Re: call for scripts — shugo@... (Shugo Maeda) 1998/02/14

前田です。

[#6417] rgrep (Re: call for scripts) — shugo@... (Shugo Maeda) 1998/02/15

前田です。

[#6423] Re: rgrep (Re: call for scripts) — matz@... (Yukihiro Matsumoto) 1998/02/16

まつもと ゆきひろです

[#6612] Re: call for scripts — Tadayoshi Funaba <tadf@...> 1998/02/21

ふなばです。

[#6582] File::Separator on cygwin — OZAWA Sakuro <ozawa@...>

小澤さくです。

19 messages 1998/02/20
[#6583] Re: File::Separator on cygwin — WATANABE Hirofumi <watanabe@...> 1998/02/20

わたなべです.

[#6586] Re: File::Separator on cygwin — OZAWA Sakuro <ozawa@...> 1998/02/20

小澤さくです。

[#6591] ruby 1.1b8 released — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

32 messages 1998/02/20
[#6620] rbc.rb and binding — shugo@... (Shugo Maeda) 1998/02/22

前田です。

[#6629] Re: rbc.rb and binding — keiju@... (石塚圭樹 ) 1998/02/23

けいじゅ@日本ラショナルソフトウェアです.

[#6643] Re: rbc.rb and binding — shugo@... (Shugo Maeda) 1998/02/23

前田です。

[#6649] Re: rbc.rb and binding — keiju@... (石塚圭樹 ) 1998/02/23

けいじゅ@日本ラショナルソフトウェアです.

[#6650] Re: rbc.rb and binding — matz@... (Yukihiro Matsumoto) 1998/02/23

まつもと ゆきひろです

[#6667] JRI 0.5 worked (was Re: rbc.rb and binding) — OZAWA Sakuro <crouton@...> 1998/02/23

さくです.

[#6687] Re: JRI 0.5 worked (was Re: rbc.rb and binding) — shugo@... (Shugo Maeda) 1998/02/24

前田です。

[#6712] JRI and JDBC — OZAWA Sakuro <ozawa@...> 1998/02/24

小澤さくです。

[#6635] hello — WATANABE Tetsuya <tetsu@...>

渡辺哲也と申します。

15 messages 1998/02/23

[#6706] Re: Counter class — toyofuku@...

豊福@パパイヤです。

12 messages 1998/02/24

[#6735] Mutex/ConditionVariable/Queue — shugo@... (Shugo Maeda)

前田です。

27 messages 1998/02/24
[#6746] Re: Mutex/ConditionVariable/Queue — keiju@... (石塚圭樹 ) 1998/02/25

けいじゅ@日本ラショナルソフトウェアです.

[#6747] Re: Mutex/ConditionVariable/Queue — shugo@... (Shugo Maeda) 1998/02/25

前田です。

[#6752] Re: Mutex/ConditionVariable/Queue — senda@... 1998/02/25

From: shugo@po.aianet.ne.jp (Shugo Maeda)

[#6754] Re: Mutex/ConditionVariable/Queue — shugo@... (Shugo Maeda) 1998/02/25

前田です。

[#6756] Re: Mutex/ConditionVariable/Queue — senda@... 1998/02/25

From: shugo@po.aianet.ne.jp (Shugo Maeda)

[#6786] Re: Mutex/ConditionVariable/Queue — senda@...

From: shugo@po.aianet.ne.jp (Shugo Maeda)

33 messages 1998/02/26
[#6791] Re: Mutex/ConditionVariable/Queue — shugo@... (Shugo Maeda) 1998/02/26

前田です。

[#6794] Re: Mutex/ConditionVariable/Queue — shugo@... (Shugo Maeda) 1998/02/26

前田です。

[#6796] Re: Mutex/ConditionVariable/Queue — keiju@... (石塚圭樹 ) 1998/02/26

けいじゅ@日本ラショナルソフトウェアです.

[ruby-list:6728] spell

From: toyofuku@...
Date: 1998-02-24 10:34:51 UTC
List: ruby-list #6728
  豊福@パパイヤです。
 
  ruby サイン本プレゼント係御中

  エントリ作品
  「英単語曖昧スペル検索」 spell.rb

    ruby spell.rb word [dictionary]

で word にスペルや音が似た英単語ベスト10を表示します。
  dictonary が指定されていないときは
/usr/local/lib/edict を検索します。

  辞書のフォーマットは edict のように一行につき
一キーワードが行の始めに書いてある形式です。

  文字列の類似度は私が適当に作った点数化法とアルゴリズム
を使っています。
  まだ実際に edict 辞書で試してないですが多分かなり時間
がかかると思います。

  曖昧検索でよい点数化法とアルゴリズムがあったら教えて下さい。
---
			豊福@パパイヤ
			unbound@papaya.juice.or.jp
			toyofuku@juice.or.jp

#!/usr/local/bin/ruby
# usage: spell.rb word [dictionary]

if (ARGV.size <= 0)
  puts("usage: #$0 word [dictionary]")
  exit 1
end

# 文字列 a と b の違いを点数化して返す
def diff(a, b)
  xlen = a.length
  ylen = b.length
  demerit = {}
  demerit[[0,0]] = 0

  for d in 1..(xlen + ylen)
    x = -1
    y = d + 1
    for i in 0..d
      x = x + 1
      y = y - 1

      if (y > ylen)
        next
      end
      if (x > xlen)
        break
      end

      x1 = x - 1
      y1 = y - 1

      if (x == 0)
        v = demerit[[0,y1]] + 2
      elsif (y == 0)
        v = demerit[[x1,0]] + 2
      else
        a1 = a[x1,1]
        b1 = b[y1,1]

        if (a1 == b1)
          # 一致したら減点 0
          ev = 0
        elsif (a1+b1 =~ /[aeiou]{2}|[lr]{2}|[fh]{2}|[bv]{2}|[ck]{2}|[cs]{2}|[mn]{2}/)
          # "l" と "r" ぐらいの違いのときは減点 1
          ev = 1
        else
          # 似ていないときは減点 3
          ev = 3
        end
        v = demerit[[x1,y1]] + ev

        v2 = 10000
        if (x >= 2 && b1 =~ /[fsxyz]/)
          # "ph" と "f" ぐらいの違いのときは減点 1
          if (b1 + ":" + a[x-2, 2] =~ /f:ph|[sz]:th|x:cs|y:[ei]e/)
            v2 = demerit[[x-2, y1]] + 1
          end
        elsif (y >= 2 && a1 =~ /[fsxyz]/)
          # "f" と "ph" ぐらいの違いのときは減点 1
          if (a1 + ":" + b[y-2, 2] =~ /f:ph|[sz]:th|x:cs|y:[ei]e/)
            v2 = demerit[[x1, y-2]] + 1
          end
        end

        # 片側読み飛ばしのときは減点 2
        v3 = demerit[[x1,y]] + 2

        # 片側読み飛ばしのときは減点 2
        v4 = demerit[[x,y1]] + 2

        # 最も減点の少ないコースを選ぶ
        v = v2 if (v2 < v)
        v = v3 if (v3 < v)
        v = v4 if (v4 < v)
      end

      return v if (x >= xlen && y >= ylen)

      demerit[[x,y]] = v
    end
  end

  raise("bug")
end

### main

default_dic = "/usr/local/lib/edict"
cand = []
sizemax = 10
dmax = 10000

word = ARGV.shift

if (ARGV.size == 0)
  ARGV.push(default_dic)
end

while (gets)
  ~/^\s*(\S*)\s*(.*)/
  d = diff(word, $1)
  if (d < dmax)
    cand <<= [d, $1, $2]
    cand.sort! {|a,b| a[0] - b[0] }
    if (cand.size > sizemax)
      cand.pop
      dmax = cand[sizemax-1][0]
    end
  end
end

for elem in cand
  print elem[1]
  print ("\t", elem[2]) if (elem[2] != "")
  print "\n"
end

In This Thread

Prev Next