मेरे पास एक कोड है जो एनएलटीके और अगले का उपयोग करके भाषण टैगिंग का हिस्सा करता है, मैं गिन रहा हूं कि प्रत्येक पंक्ति में कितने टैग हुए।

उदाहरण: यदि मेरे पास एक स्ट्रिंग इनपुट है:

A = [('car', 'NN'), ('bike', 'NN')]

मैंने अपना खुद का लूप के लिए भी नीचे लिखने की कोशिश की:

def count_tags(input_col):
    tag_count = {}
    for word, tag in input_col:
        if tag in tag_count:
            tag_count[tag] += 1
        else:
            tag_count[tag] = 1
    return(tag_count)

print('tag count is: ', count_tags(hi))

जो आउटपुट के समान है:

tag count is:  {'NN': 2}

प्रश्न:

मेरे पास एक CSV फ़ाइल है जिसमें प्रत्येक पंक्ति में स्ट्रिंग्स हैं जैसे ऊपर A उदाहरण:

print(df['tags'])

0    [('car', 'NN'), ('bike', 'NN')]
1    [('TV', 'NN'), ('access', 'JJ')

और जब मैं पांडा से लोड करता हूं और फिर टैग गिनने की कोशिश करता हूं:

df['tag_count'] = df['tags'].map(count_tags)

मुझे निम्नलिखित त्रुटि प्राप्त हो रही है:

ValueError: not enough values to unpack (expected 2, got 1)

मेरा अपेक्षित आउटपुट है:

ID  tags                              count
2   [('car', 'NN'), ('bike', 'NN')]   {'NN': 2}
4   [('TV', 'NN'), ('access', 'JJ')]  {'NN': 1, 'JJ': 1}
2
Bilgin 14 जुलाई 2020, 02:37
कृपया अपना डेटा और अपेक्षित आउटपुट न्यूनतम प्रतिलिपि प्रस्तुत करने योग्य उदाहरण के रूप में दिखाएं।
 – 
CypherX
14 जुलाई 2020, 02:46
1
मैंने सवाल अपडेट किया।
 – 
Bilgin
14 जुलाई 2020, 02:51
क्या आप बता सकते हैं कि अंतिम पंक्ति NN:2 में क्यों?
 – 
Marat
14 जुलाई 2020, 02:53
क्षमा करें, वह एक टाइपो था। मैंने ठीक कर दिया। धन्यवाद
 – 
Bilgin
14 जुलाई 2020, 02:54

2 जवाब

from collections import Counter

df['count'] = df['tags'].map(lambda pos_list: Counter(tag for _, tag in pos_list))
0
Marat 14 जुलाई 2020, 02:57
कोड के लिए धन्यवाद। मुझे अभी भी त्रुटि मिल रही है: ValueError: not enough values to unpack (expected 2, got 1)
 – 
Bilgin
14 जुलाई 2020, 03:06
इसका मतलब है कि टैग कॉलम में न केवल जोड़े की सूची है। शायद पिछले चरणों में कुछ गड़बड़ है या एक सीमा मामला है जब केवल एक मान उत्पन्न होता है
 – 
Marat
14 जुलाई 2020, 03:16

समाधान

# Using the dataframe df from the Dummy Data section
df2 = (df.tags.explode()
        .explode().groupby(level=0).value_counts()
        .to_frame().rename(columns={'tags': 'count'})
        .reset_index().rename(columns={'tags': 'tag'}) 
)
# Show all tags count
header = lambda s: f'\n{s}\n' + ''.join(['=']*len(s))
print(header('All Tags Count'))
print(df2)

target_tags = ['NN', 'JJ']
# Show target_tags count
result = df2.loc[df3.tag.str.contains('|'.join(target_tags))]
#print("\nTarget Tags Count\n")
print(header('Target Tags Count'))
print(result)

आउटपुट:

All Tags Count
==============
   ID   tag  count
0   2    NN      2
1   2  bike      1
2   2   car      1
3   4    JJ      1
4   4    NN      1
5   4    TV      1
6   4   pen      1

Target Tags Count
=================
   ID tag  count
0   2  NN      2
3   4  JJ      1
4   4  NN      1

प्रतिरूपी डेटा

import pandas as pd
df = pd.DataFrame([[2, [('car', 'NN'), ('bike', 'NN')]],
                   [4, [('TV', 'NN'), ('pen', 'JJ')]]], 
                  columns = ['ID', 'tags'])
df.set_index(["ID"], drop=False, inplace=True) # important prerequisite for the solution
print(df)

## Output: df
#
#     ID                     tags
# ID                             
# 2    2  [(car, NN), (bike, NN)]
# 4    4    [(TV, NN), (pen, JJ)]
0
CypherX 14 जुलाई 2020, 04:11
कृपया समाधान पर एक नज़र डालें। अगर आपका कोई प्रश्न हैं, तो मुझे से पूछें।
 – 
CypherX
14 जुलाई 2020, 04:13