def main(): query = sys.argv[1] since, until = sys.argv[2].split("..") client = TwitterClient(consumer_key=settings.CONSUMER_KEY, consumer_secret=settings.CONSUMER_SECRET, access_token_key=settings.ACCESS_TOKEN_KEY, access_token_secret=settings.ACCESS_TOKEN_SECRET) result = client.search(query, since, until) words = sum( [nagisa.extract(r.text, extract_postags=["名詞"]).words for r in result], []) lower_query = query.lower() without_num = [ w for w in words if not w.isdigit() and not w.lower() == lower_query ] cloud = WordCloud(background_color="white", contour_width=5, contour_color="royalblue").generate( " ".join(without_num)) plt.figure() plt.imshow(cloud, interpolation="bilinear") plt.axis("off") plt.show()
def main(): if len(sys.argv) < 2: return -1 with open(sys.argv[1], 'r') as fp: data = json.load(fp) frequencies = {} for work in data: text = normalize(work['soramimi']) words = nagisa.extract(text, \ extract_postags=['名詞', '動詞', '形容詞' ,'副詞']) evaluation = normalize(work['evaluation']) word_weight = weight(evaluation) for word in words.words: if word in STOP_WORDS: continue if word in frequencies: frequencies[word] += word_weight else: frequencies[word] = word_weight wordcloud = WordCloud(font_path=FONT_PATH, \ width=900, height=500).fit_words(frequencies) plt.figure(figsize=(15, 12)) plt.imshow(wordcloud) plt.axis('off') plt.show() return 0
def test_tagging(self): # test_1 text = 'Pythonで簡単に使えるツールです' output = 'Python/名詞 で/助詞 簡単/形状詞 に/助動詞 使える/動詞 ツール/名詞 です/助動詞' words = nagisa.tagging(text) self.assertEqual(output, str(words)) # test_2 output = 'python/名詞 で/助詞 簡単/形状詞 に/助動詞 使える/動詞 ツール/名詞 です/助動詞' words = nagisa.tagging(text, lower=True) self.assertEqual(output, str(words)) # test_3 text = 'ニューラルネットワークを使ってます。' output = 'ニューラル/名詞 ネットワーク/名詞 を/助詞 使っ/動詞 て/助動詞 ます/助動詞 。/補助記号' self.assertEqual(output, str(nagisa.tagging(text))) # test_4 tagger_nn = nagisa.Tagger(single_word_list=['ニューラルネットワーク', "ニューラルネット"]) output = 'ニューラルネットワーク/名詞 を/助詞 使っ/動詞 て/助動詞 ます/助動詞 。/補助記号' self.assertEqual(output, str(tagger_nn.tagging(text))) # test_5 text = "3月に見た「3月のライオン」" new_tagger = nagisa.Tagger(single_word_list=['3月のライオン']) output = '3/名詞 月/名詞 に/助詞 見/動詞 た/助動詞 「/補助記号 3月のライオン/名詞 」/補助記号' self.assertEqual(output, str(new_tagger.tagging(text))) # test_6 text = '(人•ᴗ•♡)こんばんは♪' output = '(人•ᴗ•♡)/補助記号 こんばんは/感動詞 ♪/補助記号' words = nagisa.tagging(text) self.assertEqual(output, str(words)) # test_7 url = 'https://github.com/taishi-i/nagisaでコードを公開中(๑¯ω¯๑)' output = 'コード/名詞 公開/名詞 中/接尾辞' words = nagisa.filter(url, filter_postags=['URL', '補助記号', '助詞']) self.assertEqual(output, str(words)) # test_8 output = 'https://github.com/taishi-i/nagisa/URL で/助詞 を/助詞 (๑ ̄ω ̄๑)/補助記号' words = nagisa.extract(url, extract_postags=['URL', '補助記号', '助詞']) self.assertEqual(output, str(words)) # test_9 words = [" (人•ᴗ•♡)", "こんばんは", "♪"] output = ['補助記号', '感動詞', '補助記号'] postags = nagisa.postagging(words) self.assertEqual(output, postags) # test_10 postags = nagisa.decode(words) self.assertEqual(output, postags)
def word_counts(comments) -> list: """ count words in all parsed commments """ import nagisa with open(STOP_WORDS_PATH) as f: stopwords = json.load(f) words = Counter() for text in [c['raw_text'] for c in comments]: t = nagisa.extract(text, extract_postags=[ '名詞', '代名詞', '形容詞']) for w in set(t.words): if w.isalpha() and w not in stopwords: words[w] += 1 return words
def extract_kaomoji(text): """ 与えられたテキストから抽出した顔文字リストを返却する。 → \(^o^)/, m(_ _)m などの 手を含む顔文字があれば、それも抽出する """ results = nagisa.extract(text, extract_postags=['補助記号']) words = results.words kaomoji_words = [] kaomoji_idx = [i for i, w in enumerate(words) if len(w) >= KAOMOJI_LEN] kaomoji_hands = ['ノ', 'ヽ', '∑', 'm', 'O', 'o', '┐', '/', '\\', '┌'] # 顔文字と手を検索 for i in kaomoji_idx: kaomoji = words[i] # 顔文字列 try: # 顔文字の左手 if words[i-1] in kaomoji_hands and 0 < i: kaomoji = words[i-1] + kaomoji # 顔文字の右手 if words[i+1] in kaomoji_hands: kaomoji = kaomoji + words[i+1] except IndexError: pass finally: kaomoji_words.append(kaomoji) return kaomoji_words
def test_tagging(self): # test_1 text = 'Pythonで簡単に使えるツールです' output = 'Python/名詞 で/助詞 簡単/形状詞 に/助動詞 使える/動詞 ツール/名詞 です/助動詞' words = nagisa.tagging(text) self.assertEqual(output, str(words)) # test_2 output = 'python/名詞 で/助詞 簡単/形状詞 に/助動詞 使える/動詞 ツール/名詞 です/助動詞' words = nagisa.tagging(text, lower=True) self.assertEqual(output, str(words)) # test_3 text = 'ニューラルネットワークを使ってます。' output = 'ニューラル/名詞 ネットワーク/名詞 を/助詞 使っ/動詞 て/助動詞 ます/助動詞 。/補助記号' self.assertEqual(output, str(nagisa.tagging(text))) # test_4 tagger_nn = nagisa.Tagger(single_word_list=['ニューラルネットワーク', "ニューラルネット"]) output = 'ニューラルネットワーク/名詞 を/助詞 使っ/動詞 て/助動詞 ます/助動詞 。/補助記号' self.assertEqual(output, str(tagger_nn.tagging(text))) # test_5 text = "3月に見た「3月のライオン」" new_tagger = nagisa.Tagger(single_word_list=['3月のライオン']) output = '3/名詞 月/名詞 に/助詞 見/動詞 た/助動詞 「/補助記号 3月のライオン/名詞 」/補助記号' self.assertEqual(output, str(new_tagger.tagging(text))) # test_6 text = "それが、iPhone XSです。" output = "それ/代名詞 が/助詞 、/補助記号 iPhone XS/名詞 です/助動詞 。/補助記号" new_tagger = nagisa.Tagger(single_word_list=["iPhone[a-zA-Z0-9 ]+"]) self.assertEqual(output, str(new_tagger.tagging(text))) # test_7 text = "1234abc ABC" output = "1234/名詞 abc ABC/名詞" new_tagger = nagisa.Tagger(single_word_list=["[a-zA-Z ]+", "[0-9]+"]) self.assertEqual(output, str(new_tagger.tagging(text))) # test_8 text = '(人•ᴗ•♡)こんばんは♪' output = '(人•ᴗ•♡)/補助記号 こんばんは/感動詞 ♪/補助記号' words = nagisa.tagging(text) self.assertEqual(output, str(words)) # test_9 url = 'https://github.com/taishi-i/nagisaでコードを公開中(๑¯ω¯๑)' output = 'コード/名詞 公開/名詞 中/接尾辞' words = nagisa.filter(url, filter_postags=['URL', '補助記号', '助詞']) self.assertEqual(output, str(words)) # test_10 output = 'https://github.com/taishi-i/nagisa/URL で/助詞 を/助詞 (๑ ̄ω ̄๑)/補助記号' words = nagisa.extract(url, extract_postags=['URL', '補助記号', '助詞']) self.assertEqual(output, str(words)) # test_11 words = [" (人•ᴗ•♡)", "こんばんは", "♪"] output = ['補助記号', '感動詞', '補助記号'] postags = nagisa.postagging(words) self.assertEqual(output, postags) # test_12 postags = nagisa.decode(words) self.assertEqual(output, postags) # test_13 words = [" (人•ᴗ•♡)", " ", "こんばんは", "♪"] output = ['補助記号', "空白", '感動詞', '補助記号'] postags = nagisa.postagging(words) self.assertEqual(output, postags) # test_14 postags = nagisa.decode(words) self.assertEqual(output, postags) # test_15 words = [" (人•ᴗ•♡)", " ", "こんばんは", "♪"] output = ['補助記号', "空白", '感動詞', '補助記号'] postags = nagisa.postagging(words) self.assertEqual(output, postags) # test_16 postags = nagisa.decode(words) self.assertEqual(output, postags) # test_17 text = "こんばんは😀" output = "こんばんは/感動詞 😀/補助記号" words = nagisa.tagging(text) self.assertEqual(output, str(words)) # test_18 text = "コンバンハ12345" output = "コンバンハ/名詞 1/名詞 2/名詞 3/名詞 4/名詞 5/名詞" words = nagisa.tagging(text) self.assertEqual(output, str(words)) # test_19 text = "𪗱𪘂𪘚𪚲" output = "𪗱/補助記号 𪘂/補助記号 𪘚/補助記号 𪚲/補助記号" words = nagisa.tagging(text) self.assertEqual(output, str(words))
def extract_url(words): results = nagisa.extract(text, extract_postags=['URL']) return results.words
def wakachi(text): return nagisa.extract(text, extract_postags=['名詞']).words