>source

사전을 사용하여 다음 기준에 따라 팬더 시리즈에서 용어를 찾고 바꿔야 합니다.

  1. 사전 값은 pandas 시리즈에서 발견되는 모든 사전 키를 대체합니다(예: 'mastersphd': 'masters phd', 대체 결과는 'mastersphd'가 발생하는 모든 위치에서 'masters phd')
  2. 기록 무결성 유지(즉, 고유한 기록을 그대로 유지해야 하기 때문에 단어 모음 접근 방식을 사용할 수 없음)
  3. 정확히 일치하는 항목만으로 교체해야 합니다(예: key:value가 'rf': 'random forest'인 경우 교체로 인해 'performance'가 'perandom forestormance'로 바뀌지 않아야 함). so regex=True는 분명히 이것을 일으키고 있습니다)

데이터: term_fixes는 사전이고 df['job_description']은 관심 토큰화된 시리즈입니다.

term_fixes= {'rf': 'random forest',
              'mastersphd': 'masters phd',
              'curiosity': 'curious',
              'trustworthy': 'ethical',
              'realise': 'realize'}
df= pd.DataFrame(data={'job_description': [['knowledge', 'of', 'algorithm', 'like', 'rf'],
                                            ['must', 'have', 'a', 'mastersphd'],
                                            ['trustworthy', 'and', 'possess', 'curiosity'],
                                            ['we', 'realise', 'performance', 'is', 'key']]})

**참고: 나는 또한 (성공하지 못한) 토큰화되지 않은 데이터 구조를 시도했지만 수행할 NLP가 더 많기 때문에 토큰화된 것을 선호합니다. 아마도 이것은 필요하지만?

df= pd.DataFrame(data={'job_description': ['knowledge of algorithm like rf',
                                            'must have a mastersphd',
                                            'must be trustworthy and possess curiosity',
                                            'we realise performance is critical']})

**원하는 결과(성능의 'rf'는 '임의의 포리스트'로 대체되지 않음): df['작업 설명']

0    ['knowledge' 'of' 'algorithm' 'like' 'random' 'forest']
1                        ['must' 'have' 'a' 'masters' 'phd']
2          ['must' 'be' 'ethical' 'and' 'possess' 'curious']
3             ['we' 'realize' 'performance' 'is' 'critical']

하지만 다음과 같은 토큰화되지 않은 구조도 허용합니다.

0    knowledge of algorithm like random forest
1                      must have a masters phd
2          must be ethical and possess curious
3           we realize performance is critical

여러 가지 접근 방식을 시도했습니다. 실패하다:df['작업_설명'].replace(list(term_fixes.keys()), list(term_fixes.values()), regex=거짓, inplace=참)

실패:df['작업_설명'].replace(dict(zip(list(term_fixes.keys()), list(term_fixes.values()))), regex=False, inplace=True)

실패:df['작업_설명']= df['작업_설명'].str.replace(term_fixes, regex=False)

실패:df['작업_설명']= df['작업_설명'].str.replace(str(term_fixes.keys()), str(term_fixes.values()), regex=True)

가장 가까운 곳은:

df['job_description']= df_jobs['job_description'].replace(term_fixes, regex=True)

그러나 regex=True는 모든 일치 항목에 플래그를 지정합니다(위의 'rf' 및 'performance' 예와 같이). 플래그를 regex=False로 변경하면 불행히도 아무 것도 대체하지 못합니다. 사용할 수 있는 다른 인수에 대해 문서를 살펴보았지만 운이 없었습니다. 이것은 토큰화되지 않은 구조를 사용합니다.

도움을 주시면 감사하겠습니다. 감사 해요!

  • 답변 # 1

    다음과 같은 것을 사용하여 토큰화되지 않은 데이터를 사용할 수 있습니다.

    for k in term_fixes:
        df['job_description']= (df['job_description'].str.replace(r'(^|(?<= )){}((?= )|$)'.format(k), term_fixes[k]))
    

  • 이전 C의 메모리 문제
  • 다음 node.js : TypeError: 정의되지 않은 속성을 읽을 수 없습니다('로그인' 읽기).