LoginSignup
4
0

Elixirで言語処理100本ノックやってみた!vol.5

Last updated at Posted at 2024-04-16

こんにちは!
3ヶ月で、Elixir言語で開発できるようになるため、奮闘中のこーへーです!

vol.4は20時間かかったので、vol.5も覚悟していたんですが1時間ぐらいで終わってしまいましたね。笑
自分で言うのも微妙なんですが、確実に実力がついてきていますね。

ということで、100本ノックvol.5をやっていきたいと思います。
100本ノックの記事はこちら

05. n-gramPermalink

与えられたシーケンス(文字列やリストなど)からn-gramを作る関数を作成せよ.この関数を用い,”I am an NLPer”という文から単語bi-gram,文字bi-gramを得よ.

案の定、問題の意味がわからずn-gramを理解するところから始めました。簡単に言うと、「I am an NLPer」を各単語と文字に区切って要素を2つずつ(bi-gram)格納してね。さらに、それを関数化してくれとのことなので、今まではiexでインタラクティブに試していたんですが、今回は.exファイルに関数を作ることにしました。

モジュール、関数の作成

defmodule NGram do
  def bigram_word(input) do
    input
    |> String.split()
    |> Enum.chunk_every(2, 1)
    |> Enum.drop(-1)
  end

  def bigram_string(input) do
    input
    |> String.codepoints()
    |> Enum.filter(fn x -> x != " " end)
    |> Enum.chunk_every(2, 1)
    |> Enum.drop(-1)
  end
end

NGram.bigram_word("I am an NLPer")の実行結果

# 単語区切りのbigram
[["I", "am"], ["am", "an"], ["an", "NLPer"]]

NGram.bigram_string("I am an NLPer")の実行結果

# 文字区切りのbigram
[
  ["I", "a"],
  ["a", "m"],
  ["m", "a"],
  ["a", "n"],
  ["n", "N"],
  ["N", "L"],
  ["L", "P"],
  ["P", "e"],
  ["e", "r"]
]

まとめ

vol.4までは、iexで問題を解いてきました。そのおかげで、ちゃんと関数を作る力がついているんだとvol.5の問題で実感することができました。
n-gramも思ったより時間はかかりましたが、頭の中で解はあったので、かなり楽に感じました。

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0