Pythonでリストからバイグラム(Bigram)を生成する方法
バイグラム(bigram)とは、文章中の連続する2つの単語をペアとして組み合わせたものです。Pythonでは、この手法がテキスト分析の分野で広く活用されています。本記事では、与えられた文からバイグラムを生成する2つのアプローチを紹介します。
enumerate()とsplit()を使う方法
まずsplit()メソッドで文を単語に分割し、その後enumerate()関数を使って隣接する単語同士をペアにしていきます。インデックス番号を利用することで、各単語とその次の単語を効率的に組み合わせられるのがポイントです。
サンプルコード
list = ['Stop. look left right. go']
print ("The given list is : \n" + str(list))
# enumerate()とsplit()を使ったバイグラム生成
output = [(k, m.split()[n + 1]) for m in list for n, k in enumerate(m.split()) if n < len(m.split()) - 1]
print ("Bigram formation from given list is: \n" + str(output))
実行結果
上記のコードを実行すると、以下の出力が得られます。
The given list is :
['Stop. look left right. go']
Bigram formation from given list is:
[('Stop.', 'look'), ('look', 'left'), ('left', 'right.'), ('right.', 'go')]
zip()とsplit()を使う方法
zip()関数とsplit()関数を組み合わせることでもバイグラムを作成できます。split()で生成した単語列に対してzip()を適用すると、先頭から順にスライスした2つのリストがペアリングされ、連続する単語の組み合わせが簡単に得られます。こちらの方法は内包表記もシンプルになり、可読性が高いのが特徴です。
サンプルコード
list = ['Stop. look left right. go']
print ("The given list is : \n" + str(list))
# zip()とsplit()を使ったバイグラム生成
output = [m for n in list for m in zip(n.split(" ")[:-1], n.split(" ")[1:])]
print ("Bigram formation from given list is: \n" + str(output))
実行結果
上記のコードを実行すると、以下の出力が得られます。
The given list is :
['Stop. look left right. go']
Bigram formation from given list is:
[('Stop.', 'look'), ('look', 'left'), ('left', 'right.'), ('right.', 'go')]
まとめ
どちらの方法でも同じ結果が得られますが、zip()を使う方法はスライス操作だけで完結するため、コードがより簡潔になります。一方、enumerate()を使う方法はインデックスを明示的に扱うため、処理の流れを細かく制御したい場合に便利です。用途や可読性の要件に応じて使い分けるとよいでしょう。
-
Pythonでネストされたリストから正の数だけを抽出する方法
Pythonのリストはネスト(入れ子)構造にすることができます。つまり、リストの要素そのものがリストであるケースです。本記事では、このような「リストのリスト」から正の数のみを取り出す方法を解説します。処理結果としては、正の数だけを含むネストされたリストが新しいリストとして生成されます。 リスト内包表記(for in)を使う方法 最もシンプルなのが、forループによるリスト内包表記を使うアプローチです。各要素に対して比較演算子で値を判定し、正の数であれば新しいリストに格納します。内側の内包表記が各サブリストの正の数を集め、外側の内包表記がそれらをまとめて最終的なリストのリストを作成します。 コー
-
Pythonでリストを任意の位置で分割してサブリストを作成する方法
データ分析の現場では、データを整形したり移動させたりといった複雑な処理が求められる場面が多くあります。そのような状況で役立つのが、1つの大きなリストを要件に応じて複数のサブリストに分割するテクニックです。本記事では、Pythonでリストを指定した位置で分割するための代表的なアプローチを、具体的なコード例とともに解説します。方法1:zipとforループ(リスト内包表記)を使うこのアプローチでは、まずスライス(リストダイス)を使って分割開始位置から要素を取り出します。次に、zip関数とforループ(リスト内包表記)を組み合わせることで、分割ポイントごとにサブリストを生成します。[0] + spli