कुछ टेक्स्ट डेटा का विश्लेषण करने और कीवर्ड खोजने की कोशिश कर रहा है। मेरे पास पांडा डेटाफ़्रेम में टेक्स्ट डेटा है, और मेरे पास किसी अन्य डेटाफ़्रेम में कीवर्ड हैं। कीवर्ड डेटाफ़्रेम में प्रत्येक आइटम के लिए टेक्स्ट डेटा डेटाफ़्रेम खोजने के लिए सबसे कुशल तरीका क्या होगा? यदि संभव हो तो मैं लूपिंग से बचने की कोशिश कर रहा हूं, क्योंकि मुझे पता है कि यह बहुत भयानक प्रदर्शन प्राप्त कर सकता है। मैंने एक फ़ंक्शन लिखने के बारे में सोचा था जिसे मैं तब डेटाफ़्रेम का उपयोग कर सकता था। स्रोत डेटाफ़्रेम पर लागू करें, लेकिन मैं दूसरे डेटाफ़्रेम के माध्यम से लूप करने और अपने स्रोत में प्रत्येक कीवर्ड की तलाश करने का कोई तरीका नहीं समझ सकता ...

मैंने स्रोत डेटा सेटअप के नीचे एक उदाहरण शामिल किया है, साथ ही मेरा परिणामी डेटाफ़्रेम कैसा दिखना चाहिए इसका एक मॉकअप भी शामिल किया है। स्कोर यह होगा कि उस पंक्ति के टेक्स्ट में कितने कीवर्ड हैं। अग्रिम में धन्यवाद!!

#%% Setup
import pandas as pd

source_df = pd.DataFrame(
    {
        "IDNumber": [4, 5, 6, 7],
        "Text": [
            "Number 4 has a cell phone, lightsaber, and a tablet",
            "Number 5 has a burrito",
            "Number 6 has a lightsaber and the senate",
            "",
        ],
    }
)

keyword_df = pd.DataFrame(
    {
        "Keyword": [
            "lightsaber",
            "microphone",
            "senate",
            6,
        ]
    }
)

#%% Trying to come up with something that results in
#   IDNumber    Text                                                    Score
# 0 4           Number 4 has a cell phone, lightsaber, and a tablet.    1
# 1 5           Number 5 has a burrito                                  0
# 2 6           Number 6 has a lightsaber and the senate                3
# 3 7                                                                   0
0
theholyhandgrenade 12 मई 2021, 02:58
"नंबर 6 में एक रोशनी और सीनेट है" क्यों 3 नहीं है यदि इसमें 6, रोशनी, और सीनेट है?
 – 
Henry Ecker
12 मई 2021, 03:21
मेरा बुरा, ठीक करने के लिए संपादित।
 – 
theholyhandgrenade
12 मई 2021, 19:58

1 उत्तर

सबसे बढ़िया उत्तर

यह मानते हुए कि IDNumber 6 के स्कोर के रूप में आपका मतलब 2 के बजाय 3 है, यहाँ एक समाधान है:

source_df['Score'] = source_df['Text'].str.findall(
    '|'.join(keyword_df['Keyword'].astype('str').tolist())
).str.len()
1
Vikash Balasubramanian 12 मई 2021, 03:25
आह अच्छा पकड़; मैंने 6 को सिर्फ यह दर्शाने के लिए शामिल किया था कि कुछ चीजें संख्या हो सकती हैं, लेकिन यह वास्तव में 3 को हल करती है। मैं मूल को ठीक कर दूंगा। यह मेरे लिए काम करता है और बहुत अच्छा प्रदर्शन करता है। धन्यवाद!!!!
 – 
theholyhandgrenade
12 मई 2021, 19:57