WordPress.com で次のようなサイトをデザイン
始めてみよう

自然言語解析:「N-gram」について

今回は、N-gramとは何かについて、解説したいと思います。 N-gramとは…

今回は、N-gram(エヌ-グラム)とは何かについて、解説したいと思います。
※個人的に収集した知識です。正確ではない表現や、大きな誤り等があるかもしれません。お気付きの際はご指摘いただけると幸いです。

N-gramとは

概要

文章を分割する方法。文章をN文字単位で区切る。

1文字で区切るunigram、2文字で区切るbigram、3文字で区切るtrigramなどがある。

日本語の場合、文章をそのまま文字単位で区切る方法と、形態素解析を実施した後に、単語単位で区切る方法の2種類が存在する。

恐らく例を見るのが一番分かりやすいです。

例:元の文章「今日学校に行く」
bigram(文字単位):今日, 日学, 学校, 校に, に行, 行く
bigram(単語単位):今日学校, 学校に, に行く

以上の通りやりたいことは実に簡単です。
google検索などの検索エンジンで使用されているのですが、これを知った時は、正直これって役に立つの?と思いました。
N-gramを使わずにMeCabなどを用いて形態素解析をしたら十分だと思ったからです。

もちろんN-gramにも利点があります。

例えばこれまでは存在していなかった単語(略語や造語など)を取り扱う際に、形態素解析だとその単語を認識できず、検索がうまく行えない可能性があります。

その点N-gramだと、機械的に文字を分割して検索を行えますので、そうした単語の検索でも比較的正しい検索が行えると考えられます。

コード

実際にpythonで作成したコードは以下。

def n_gram(phrase, n, word=True):
    outcome_list = []
    if word == True:
        phrase_list = phrase.split()
        for i in range(len(phrase_list) - n + 1):
            outcome_list.append(phrase_list[i:i+n])
        return outcome_list
    else: 
        phrase = phrase.replace(" ", "")
        for i in range(len(phrase) - n + 1):
            outcome_list.append(phrase[i:i+n])
        return outcome_list

こちらのコードでは、英語の文章についての文字・単語単位のN-gramとなっています。
※文字単位の場合は、スペースは除いて出力するようにしています。

N-gramに関しては多くの方が色々なコードで作成しております。
ぜひ他の方のコードもご参考にしてください。

プログラミング環境

こんにちは。自己紹介にて書き忘れていたので、ここで私のプログラミング環境について簡単に触れておこうかと思います。 パソコン MacBook Pro 開発環境 ※2021年9月3日に追記 PyCharm 無償版…

こんにちは。
自己紹介にて書き忘れていたので、ここで私のプログラミング環境について簡単に触れておこうかと思います。

パソコン

開発環境

※2021年9月3日に追記

簡潔ですが、以上になります。
開発環境でオススメなどありましたら教えていただけると助かります。

自己紹介

初めまして。薬学生と申します。2018年からpythonを学び始めて、昨年からなかなか独学でやっているだけだと、「身についた気がしない。」、「使えているのかわからない。」と感じ、アウトプットする場を設けるため、このブログを開設しました…

初めまして。薬学生と申します。
2018年からpythonを学び始めました。なかなか独学でやっているだけだと、「身についた気がしない。」、「使えているのかわからない。」と感じ、アウトプットする場を設けるため、このブログを開設しました。

このブログでは、

  • pythonを用いたプログラミング
  • 暗号資産(仮想通貨)

について述べていきます。
自分が学んだことを発信していくので脈絡のないコンテンツになるかも知れませんがご容赦ください。

現在はpython関係だと
自然言語解析NLP:Natural Language Processing)
・ウェブスクレイピング(web scraping
時系列データ解析
に取り組んでいます。(2021年8月現在)

暗号資産の関係だと
・DeFi(Decentralized Finance)
・NFT(非代替性トークン)
・GameFi
あたりに関する個人的な考えなどをまとめていこうかなと思います。

また、ここで示す内容には不正確なものや、正しいけれどもより効率のより方法が存在するものが多数あるかと思います。
そうしたものを見かけた際には、お気軽に指摘していただけると幸いです。

簡単ですが、自己紹介はこれくらいで。
皆々様、よろしくお願いいたします。