【问题标题】:Cleaning Data and Filtering Series清洗数据和过滤系列
【发布时间】:2020-11-27 08:31:18
【问题描述】:

我正在分析来自 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”和“react.js”之类的词。感谢您提供任何和所有帮助。

【问题讨论】:

  • 请详细说明问题。你能缩小问题的范围,看看它是在绘图部分、标记化还是其他地方?
  • 我相信问题出在标记化上。由于 # 字符,它无法将“c#”识别为单词。我目前正在研究其他解决方案,例如 TweetTokenizer 来识别特殊字符。

标签: python pandas nltk data-analysis stop-words


【解决方案1】:

您可以通过更改标点符号的正则表达式来修改 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++']

【讨论】:

    猜你喜欢
    • 2021-02-04
    • 2019-03-15
    • 2021-11-21
    • 2018-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多