Почему подстрока не может быть найдена в целевой строке?

#python-3.x #str-replace

Вопрос:

Чтобы понять значения каждой переменной, я улучшил скрипт для замены из класса Udacity. Я преобразую коды в функции в обычные коды. Однако мои коды не работают, в то время как коды в функции работают. Я буду признателен, если кто-нибудь сможет это объяснить. Пожалуйста, обратите больше внимания на функцию «токенизация».

Ниже приведены коды из класса Udacity (авторское право принадлежит Udacity).

 # download necessary NLTK data
import nltk
nltk.download(['punkt', 'wordnet'])

# import statements
import re
import pandas as pd
from nltk.tokenize import word_tokenize
from nltk.stem import WordNetLemmatizer

url_regex = 'http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.amp; ]|[!*(),]|(?:%[0-9a-fA-F][0-9a-fA-F])) '


def load_data():
    df = pd.read_csv('corporate_messaging.csv', encoding='latin-1')
    df = df[(df["category:confidence"] == 1) amp; (df['category'] != 'Exclude')]
    X = df.text.values
    y = df.category.values
    return X, y


def tokenize(text):
    detected_urls = re.findall(url_regex, text)  # here, "detected_urls" is a list for sure
    for url in detected_urls:
        text = text.replace(url, "urlplaceholder") # I do not understand why it can work while does not work in my code if I do not convert it to string

    tokens = word_tokenize(text)
    lemmatizer = WordNetLemmatizer()

    clean_tokens = []
    for tok in tokens:
        clean_tok = lemmatizer.lemmatize(tok).lower().strip()
        clean_tokens.append(clean_tok)

    return clean_tokens


X, y = load_data()
for message in X[:5]:
    tokens = tokenize(message)
    print(message)
    print(tokens, 'n')
 

Ниже приведен его вывод:
введите описание изображения здесь

Я хочу понять значения переменных в функции «tokenize ()». Ниже приведены мои коды.

 X, y = load_data()
detected_urls =  []
for message in X[:5]:
    detected_url = re.findall(url_regex, message)
    detected_urls.append(detected_url)
print("detected_urs: ",detected_urls)    #output a list without problems

# replace each url in text string with placeholder
i = 0
for url in detected_urls:
    text = X[i].strip()
    i  = 1
    print("LN1.url= ",url,"ttext= ",text,"n type(text)=",type(text))
    url = str(url).strip()  #if I do not convert it to string, it is a list. It does not work in text.replace() below, but works in above function.
    if url in text:
        print("yes")
    else:
        print("no")    #always show no
    text = text.replace(url, "urlplaceholder")
    print("nLN2.url=",url,"ttext= ",text,"n type(text)=",type(text),"n===============nn")
 

Результат показан ниже.

введите описание изображения здесь

Выходные данные для «LN1» и «LN2» одинаковы. Условие «если» всегда выводит «нет». Я не понимаю, почему это происходит.

Любая дальнейшая помощь и советы будут высоко оценены.

Комментарии:

1. Внутри 2-го for цикла не могли бы вы распечатать, пожалуйста text , и url что находится на 1 строчке выше if утверждения?

2. @RobertKwiatkowski, Спасибо! Я добавил результаты в исходные вопросы. Пожалуйста, ознакомьтесь с ними. Еще раз спасибо!

3. @Leon вы должны были добавить их в виде текста, а не в виде изображения …

4. @Программист, мои извинения.

5. @Leon, пожалуйста, удалите изображения из своего поста и вместо этого поместите вывод в виде текста …