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

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

新規登録して質問してみよう
ただいま回答率
85.46%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

自然言語処理

自然言語処理は、日常的に使用される自然言語をコンピューターに処理させる技術やソフトウェアの総称です。

Q&A

解決済

1回答

1195閲覧

【自然言語処理】CountVectorizerで単語ngramを作成する際に句読点単体も含めたい

xdgy

総合スコア4

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

自然言語処理

自然言語処理は、日常的に使用される自然言語をコンピューターに処理させる技術やソフトウェアの総称です。

0グッド

1クリップ

投稿2020/10/03 15:35

###実現したいこと
分かち書きが既にされていて、単語の後に半角スペースが付いている、次の文書集合があるとします。

python

1text1 = "吾輩 は 、 猫 で ある 。 eos " 2text2 = "名前 は 、 まだ ない 。 eos " 3texts_list = [text1,text2]

このとき目標は、この文書集合から、考えうるすべての2gramを抽出することです。すなわち、今回の場合で言えば、次のような2gramたちを抽出したいです。

python

1['ある eos', 'で ある', 'ない eos', 'は まだ', 'は 猫', 'まだ ない', '名前 は', '吾輩 は', '猫 で', 'は 、', '、 猫', 'ある 。', '。 eos', 'ない 。', '。 eos']

###困っていること
句読点を含まずに2gramを抽出するのであれば、次のようなコードで得られます。

python

1>>> from sklearn.feature_extraction.text import CountVectorizer 2>>> vectorizer = CountVectorizer(analyzer="word",token_pattern="(?u)\b\w+\b",lowercase=False,ngram_range=(2,2)) 3>>> vectorizer.fit_transform(texts_list) 4<2x9 sparse matrix of type '<class 'numpy.int64'>' 5 with 9 stored elements in Compressed Sparse Row format> 6>>> vectorizer.get_feature_names() 7['ある eos', 'で ある', 'ない eos', 'は まだ', 'は 猫', 'まだ ない', '名前 は', '吾輩 は', '猫 で']

しかし、上のtoken_patternでは句読点単体を単語として含ませることができず、その原因として私の現段階での理解では、\bは\wと\Wの間の境界を表すが、「。」や「、」らの句読点は\wの中には含まれないため、これらの句読点が単語として認識されなかったのではないかと考えています。

句読点単体を単語としてみなしてngramを抽出するにはどうすれば良いのでしょうか?なお、sparse matrixを使いたいので、できれば、CountVectorizerを用いてngramを作成したいです。
###実行環境
OS:macOS Catalina
Python:3.7.6
scikit-learn:0.23.1

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

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

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

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

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

guest

回答1

0

ベストアンサー

\bに頼るのは無理そうなので、単純に「直後に空白文字がある、空白文字以外のもの」という条件にしてみました。要件を満たせそうでしょうか。

python

1vectorizer = CountVectorizer(analyzer="word",token_pattern="(?u)\S+(?=\s)",lowercase=False,ngram_range=(2,2))

手元の環境での実行結果:

python

1['、 まだ', '、 猫', '。 eos', 'ある 。', 'で ある', 'ない 。', 'は 、', 'まだ ない', '名前 は', '吾輩 は', '猫 で']

投稿2020/10/04 00:39

編集2020/10/04 00:43
segavvy

総合スコア958

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

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

xdgy

2020/10/04 02:13

まさしく求めていたものです!これだと空白以外のすべての記号にマッチしてくれるので、「、」「。」以外の他の句読点にも対応できそうです。この度は回答ありがとうございました。
segavvy

2020/10/04 02:16

いえいえ、お役に立てたようで良かったです!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問