Серия очистки данных и фильтрации - PullRequest
2 голосов
/ 07 августа 2020

Я работаю над анализом набора данных объявлений о вакансиях от Indeed. Моя проблема заключается в фильтрации описания должности и захвате навыков, содержащих специальные символы. Например, я не могу вставить «c#» в график с помощью этого кода:

def cleanData(desc):
    desc = word_tokenize(desc)
    desc = [word.lower() for word in desc]
    desc = [word for word in desc if word not in stop_words]
    return desc

stop_words = stopwords.words('english')
tags_df = df["Description"].apply(cleanData)
result = tags_df.apply(Counter).sum().items()
result = sorted(result, key=lambda kv: kv[1],reverse=True)
result_series = pd.Series({k: v for k, v in result})

skills = ["java", "c#", "c++", "javascript", "sql", "python", "php", "html", "css"]
filter_series = result_series.filter(items=skills)
filter_series.plot(kind='bar',figsize=(20,5))

Однако я все еще могу использовать такие слова, как «c ++», «asp. net. 'и' реагировать. js '. Любая помощь приветствуется.

1 Ответ

1 голос
/ 12 августа 2020

Вы можете изменить поведение токенизатора nltk, изменив регулярное выражение для знаков препинания:

from nltk.tokenize import TreebankWordTokenizer
import re
tokenizer = TreebankWordTokenizer()
tokenizer.PUNCTUATION = [
        (re.compile(r"([:,])([^\d])"), r" \1 \2"),
        (re.compile(r"([:,])$"), r" \1 "),
        (re.compile(r"\.\.\."), r" ... "),
        (re.compile(r"[;@$%&]"), r" \g<0> "),
        (
            re.compile(r'([^\.])(\.)([\]\)}>"\']*)\s*$'),
            r"\1 \2\3 ",
        ),  # Handles the final period.
        (re.compile(r"[?!]"), r" \g<0> "),
        (re.compile(r"([^'])' "), r"\1 ' "),
    ]

text = 'My favorite programming languages are c# and c++'
tokens = tokenizer.tokenize(text)
print(tokens)

Вывод:

['My', 'favorite', 'programming', 'languages', 'are', 'c#', 'and', 'c++']
...