Как использовать segment() из wordsegment внутри для re.sub для извлечения слов из хэштегов в Python?

Я работаю над анализом настроений твитов с помощью Python. В процессе очистки твитов хочу извлекать слова из хэштегов. Я обнаружил, что библиотека wordsegment выполняет эту работу очень эффективно. Однако моя проблема в том, что библиотека wordsegment заняла много времени, когда я применил ее для заполнения столбцов твитов в моем наборе данных, используя df['tweet].apply(lambda x: segment(x)). Думаю, я могу сократить это время, применив segment()работа с хэштегами. Для этого я сначала создал функцию как фальшивую:

def extract_words(hashtags):
    words = " ".join(segment(hashtags))
    return words

а затем я попытался применить, используя re.sub:

df['tweet'] = df['tweet'].apply(lambda x: re.sub(r'#(\w)+', extract_words, x))

Этот код не сработал и дал мне ошибку. Что я могу сделать, чтобы применить сегмент только к хэштегам?

1 ответ

В качестве альтернативы вы можете использовать re.findall внутри своего extract_wordsфункция, чтобы получить все вхождения хэштегов для каждого твита и поместить их в список. Регулярное выражение должно измениться на (#\w+), поместив хэштег и один или несколько квантификаторов внутри группы захвата, это упростит последующую функцию замены. Оттуда вы можете заменить каждый найденный хэштег на результат segment функция для этого хэштега.

Введите sample.csv

tweets
"RT @NatGeo: Watch: When humans live on Mars, what exactly will they call home? https://xxxxxxx/QlJBuB6FX2 #CountdownToMars"
"RT @HodderBooks: With the delectable #ActsOfLove publishing tomorrow, here's @TalulahRiley�herself to tell you about her debut novel: https?"
"RT @solarimpulse: BREAKING: we flew 40'000km without fuel. It's a first for energy, take it further! #futureisclean https://xxxxxxx/JCvKTDBVZx"
"RT @TeslaRoadTrip: #TeslaRoadTrip All - thanks so much for following our twitter feed.  The trip was a success and everyone has diverted ..."
"RT @TeslaMotors: Agreed. @FTC affirms States to allow consumers to choose how they buy their cars. #Tesla #Michigan http://xxxxxxx/fT1JHjMpzg""
import pandas as pd
import re
import wordsegment as ws
ws.load()

def extract_words(tweet):
    hashtags = re.findall(r"(#\w+)", tweet)
    for hs in hashtags:
        words = " ".join(ws.segment(hs))
        tweet = tweet.replace(hs, words)
    return tweet

df = pd.read_csv("sample.csv")
print(df)

df['NewTweet'] = df['tweets'].apply(lambda x: extract_words(x))
print(df)

Вывод из NewTweet

RT @NatGeo: Watch: When humans live on Mars, what exactly will they call home? https://xxxxxxx/QlJBuB6FX2 countdown to mars
RT @HodderBooks: With the delectable acts of love publishing tomorrow, here's @TalulahRiley�herself to tell you about her debut novel: https?
RT @solarimpulse: BREAKING: we flew 40'000km without fuel. It's a first for energy, take it further! future is clean https://xxxxxxx/JCvKTDBVZx
RT @TeslaRoadTrip: tesla road trip All - thanks so much for following our twitter feed.  The trip was a success and everyone has diverted ...
RT @TeslaMotors: Agreed. @FTC affirms States to allow consumers to choose how they buy their cars. tesla michigan http://xxxxxxx/fT1JHjMpzg
Другие вопросы по тегам