【twitter-text-parser】ツイートの正確な文字数を取得[Python]

  • URLをコピーしました!

twitter-text-parser

前回、TweepyからTwitter API v2を使うため、新規アカウントでTwitter Developers Portalに登録してみました。

今回はTwitter APIからは少し離れて、それでもTwitterの話題ということで、ツイートの文字数を正確に数えてくれるtwitter-text-parserを少しいじってみようと思います。

とその前にTwitterの文字数ですが、現在英数字のような半角では280文字、日本語のような全角文字では140文字となっています。

またURLを記載した場合は、ツイートしたのち短縮URLに変換されるため、一律で22文字使用することになっています。

ここで問題になってくるのが、ツイートの文字数を正確に数えること。

正確に数えられれば、ハッシュタグをギリギリまで盛り込むなんてこともできるようになります。

ということで今回紹介するtwitter-text-parserでは文字を判別して正確にツイート用の文字数をカウントしてくれるライブラリです。

それでは始めていきましょう。

twitter-text-parser

twitter-text-parserはpipを使ってインストールします。

pip install twitter-text-parser

ただ私の環境ではattrsというライブラリが依存関係でエラーとなってしまいました。

ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.
twitter-text-parser 2.0.0 requires attrs~=19.3.0, but you have attrs 21.4.0 which is incompatible.

現状のattrsのバージョンが高すぎるということが問題なので、使用できるバージョンの一番新しいものにダウングレードします。

pip install attrs==19.3.0

これでインストール完了です。

日本語と英語の文字数をカウント

まずは基本的な使い方を学んでいきます。

1番の基本ということで日本語だけと英語だけの文章のカウントをして、len関数と比較してみましょう。

from twitter_text import parse_tweet

text1 = 'あいうえおかきくけこ'
text2 = 'abcdefghij'

print(len(text1))
print(parse_tweet(text1))

print(len(text2))
print(parse_tweet(text2))

実行結果
10
ParsedResult(valid=True, weightedLength=20, permillage=71, validRangeStart=0, validRangeEnd=9, 
displayRangeStart=0, displayRangeEnd=9)
10
ParsedResult(valid=True, weightedLength=10, permillage=35, validRangeStart=0, validRangeEnd=9, 
displayRangeStart=0, displayRangeEnd=9)

10が2回出てきますがこれがlen関数で数えた時の文字数です。

日本語も英語も10文字としてカウントされています。

ParsedResultで始まる行がtwitter-text-parserでカウントした結果です。

注目すべきはその中の「weightedLength」です。

日本語の文に対しては「20」、英語の文に関しては「10」になっています。

これは英語の文に換算した文字数なので、日本語は文字数の倍の値になっています。

そしてこの文字数が280文字になるまでツイートできるというわけです。

日本語と英語が混ざっている場合

次に日本語と英語が混ざっている場合を見てみましょう。

from twitter_text import parse_tweet

text3 = 'あいうえおかきくけこabcdefghij'

print(len(text3))
print(parse_tweet(text3))

実行結果
20
ParsedResult(valid=True, weightedLength=30, permillage=107, validRangeStart=0, validRangeEnd=19, 
displayRangeStart=0, displayRangeEnd=19)

混ざっていても問題なくカウントでき、len関数での文字数は20文字なのに対して、twitter-text-parserでの文字数はちゃんと日本語が2文字としてカウントされて30文字になっています。

記号が混ざっている場合

Twitterではハッシュタグ用の「#」が混ざっていることが多々有ますし、「@」や「.(ピリオド)」なんかも使う可能性が考えられます。

ということで試してみました。

from twitter_text import parse_tweet

text4 = 'abcde#fghij'
text5 = 'abcde@fghij'
text6 = 'abcde.fghij'

print(len(text4))
print(parse_tweet(text4))

print(len(text5))
print(parse_tweet(text5))

print(len(text6))
print(parse_tweet(text6))

実行結果
11
ParsedResult(valid=True, weightedLength=11, permillage=39, validRangeStart=0, validRangeEnd=10, 
displayRangeStart=0, displayRangeEnd=10)
11
ParsedResult(valid=True, weightedLength=11, permillage=39, validRangeStart=0, validRangeEnd=10, 
displayRangeStart=0, displayRangeEnd=10)
11
ParsedResult(valid=True, weightedLength=11, permillage=39, validRangeStart=0, validRangeEnd=10, 
displayRangeStart=0, displayRangeEnd=10)

「#」、「@」、「.」は英語の記号なので、それぞれ1文字としてカウントされました。

ツイートできるか確認

twitter-text-parserにはツイート可能か判定してくれる機能もあります。

先ほどの「ParsedResult」のうち「valid」という値が判定結果になります。

ということで判定結果を得るには「parse_tweet(テキスト).valid」、ついでにツイート用の文字数を得るには「parse_tweet(テキスト).weightedLength」で得ることができます。

from twitter_text import parse_tweet

text7 = 'あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわをん'

print(parse_tweet(text7).valid)
print(parse_tweet(text7).weightedLength)

実行結果
True
92

Twitter APIでツイートするには是非とも知っておきたいライブラリです。

次回はリスト内包表記が2重で使えることを学んだので、まとめてみようと思います。

ではでは今回はこんな感じで。

よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする

目次