igo-ruby와 jubatus를 사용해 보세요~ 문장의 해석편~

총결산


• 도입이 좀 까다롭다
• python에서 MeCab/scipy를 사용하거나 julby에서 Mahout을 사용하는 것이 합리적일 수 있습니다
장편문장 무겁고 고통스럽다
· 하지만 여러분들의 감정이 고조되면 저는 매우 기쁠 것입니다

참조 페이지 목록


일단 넣으면 넣는다.(igo에서 행렬 모델로서의 글을 특이치로 분해하고 k-부근법으로 채택하기를 희망함)
빠른 시작
wget 대신 curl-o로 해봤는데 잘 안 됐어요.
igo의 사전을 제작하여igo-ruby로 형태소를 분석하다
결과, 수동으로 사전 다운로드 및 만들기
Java 형태 분석 엔진 "Igo" 시도
생성 방법의 매개 변수가 포맷되었습니다
일본어로 pry.

가장 적합한 곳


형태소 해석(문장의 적절한 분해와 어류 분리)을 위해서는'사전'이 필요하다.
나는 그 사전을 다운로드하고 설치하는 데 많은 시간을 썼다.
igo ver0.4.5
다운로드 후
MeCab IPA 사전
다운로드tar xzvf mecab-ipadic-2.7.0-20070801.tar.gz사전의 데이터 파일을 동결해제합니다.
(왠지 *.tar.tar.gz이름이 이상해.)
gz지만 gunzip을 사용할 필요가 없을 것 같습니다.
이 디렉터리는 해동된 후에 net 생성될 것이라고 생각합니다.java -cp igo-0.4.5.jar net.reduls.igo.bin.BuildDic ipadic mecab-ipadic-2.7.0-20070801 EUC-JP사전을 만든 후 ipadic 라는 디렉터리에 많은 것들이 포함되어 있습니다.
나는 이것을 Rails 프로젝트의 assets 바로 아래에 놓았다.
그리고 pry로 해보세요.
igo-parse-test.rb

#!/usr/bin/env ruby
# -*- coding: utf-8 -*-

mes = ARGV.join(' ') unless ARGV.empty?
mes = "引数にparseしたい文章を入れて起動してね" unless mes

tagger = Igo::Tagger.new('./app/asset/ipadic')

puts tagger.wakati(mes)
tagger.parse(mes).each{|i|
  puts "#{i.surface} #{i.feature} #{i.start}"
}

사용해 보려고 하는데 pry는 일본어를 사용할 수 없습니다.
ruby2.0.0p353을 마운트 해제하면 루비게이지의 extension-appi-version 방법이 좋지 않아서 루비2에 빠집니다.0.0p247을 긴급 기용하다.
pry 안 써도 돼요.
home_controller.rb

class HomeController < ApplicationController

  MES = "兄さん、兄さんが有限実行の志士なのはわかりましたから、5日分の牛肉やら白菜やらまとめ買いしてくるの、止して下さい…「こんなにすき焼きの材料買って…お餅は
何時食べるのですか…」「餅をすき焼きの中に入れればよい」兄さんのすき焼きに寄せる万能感、どこ から来てるの"

  def index
    igo MES
  end

  private

  def igo arg
    mes = arg unless arg.empty?
    mes = "引数にparseしたい文章を入れて起動してね" unless mes

    tagger = Igo::Tagger.new(File.join("#{Rails.root}", "app", "assets", "ipadic"))

    @wakati = tagger.wakati(mes)
    @igo = tagger.parse(mes)
  end
end

~/home/index.html.erb

<h1>Home#index</h1>

<%= @wakati %>

<% @igo.each do |i| %>
  <%= "#{i.surface} #{i.feature} #{i.start}" %>
<% end %>

이렇게 하면...

글쓰기와 형태소 분석을 잘 구분할 수 있네요.
다음
형태소 분석 입력 데이터
・ 결과에 대한 행렬 모델링
・행렬을 특이값으로 분해하고 축소
• 축소 행렬의 임의 열의 여현 유사도 계산
주바투스로 근처를 완성할 수 있었으면 좋겠어요.할 수 있을지 모르겠어요.
그럼 안녕히 계세요.

추기


임의의 입력을 받아서 예쁘게 표시할 수 있습니다.
~home/index.html.erb

<h1>Home#index</h1>


<h2>解析文を入力してください</h2>

<%= simple_form_for :igo_form do |f| %>
  <%= f.error_notification %>
  <%= f.input :text, as: :text %>
  <div class="form-actions">
    <%= f.button :submit, class: 'btn-danger btn-large' %>
  </div>
<% end %>

<h2>入力</h2>

<p><%= @mes %></p>

<% if @igo %>
  <h2>分かち書き</h2>
  <p><%= @wakati %></p>
  <h2>形態素解析</h2>
  <table class="table table-striped table-bordered table-hover">
    <thead>
      <tr>
        <th>形態素の表層形</th>
        <th>形態素の素性</th>
        <th>テキスト内での形態素の出現開始位置</th>
      </tr>
    </thead>
    <tbody>
      <% @igo.each do |i| %>
        <tr>
          <td><%= "#{i.surface}" %></td>
          <td><%= "#{i.feature}" %></td>
          <td><%= "#{i.start}" %></td>
        </tr>
      <% end %>
    </tbody>
  </table>
<% end %>

home_controller.rb

class HomeController < ApplicationController
  def index
    igo params[:igo_form][:text].gsub(/(\r\n|\r|\n)/, "") if params[:igo_form]
  end

  private

  def igo arg
    @mes = arg.present? ? arg : "引数にparseしたい文章を入れて起動してね"

    tagger = Igo::Tagger.new(File.join("#{Rails.root}", "app", "assets", "ipadic"))

    @wakati = tagger.wakati(@mes)
    @igo = tagger.parse(@mes)
  end
end

igo_form.rb

class IgoForm < ActiveRecord::Base
  extend ActiveModel::Naming
  include ActiveModel::Conversion

  attr_accessor :text

  def initialize(attributes = {})
    self.attributes = attributes
  end

  def attributes=(attributes = {})
    if attributes
      attributes.each do |name, value|
        send "#{name}=", value
      end
    end
  end

  def attributes
    Hash[instance_variable_names.map{|v| [v[1..-1], instance_variable_get(v)]}]
  end
end

이렇게 된 느낌.


MeCab보다 방법이 적고 출력 형식도 적지만, 지금은 크게 신경 쓸 정도는 아닌 것 같다.
좀 서툴지만 참고가 됐으면 좋겠어요

좋은 웹페이지 즐겨찾기