Использование алгоритма FuzzyMatching для определения наличия похожих слов в столбце Имя - PullRequest
2 голосов
/ 31 октября 2019

В настоящее время у меня возникает проблема с выяснением того, как использовать пакет FuzzyWuzzy, в котором он идентифицирует столбец «Имя» и определяет, есть ли похожие имена. Я также перенес этот документ, так как это формат, необходимый для проекта, который я создаю о данных GMPP. Любая помощь будет принята с благодарностью :)

Текущий процесс помещен в фрейм данных, так как я думал, что это будет самый простой способ решить эту проблему. Я попытался решить прямо из файла CSV также, но не повезло. Я также попытался разделить данные на две части и сравнить, но если бы данные были динамичными, это не достигло бы той цели, к которой я стремился, в которой этот процесс может выполняться при добавлении дополнительных данных.

https://drive.google.com/open?id=1Aq_2NTfjRtf9b3L5hNHilctVQfcHynPD Эта ссылка содержит файл данных и код, который я использовал

 import pandas as pd
 import numpy as np
 #Fuzzywuzzy used for string matching
 from fuzzywuzzy import fuzz 
 from fuzzywuzzy import process 

#Reading Data in and creating DB
data = pd.read_csv("data(2).csv", encoding="ISO-8859-1")
print(data.head)
data = data.sort_values('Name')
print(data.head)

df = pd.read_csv("data(2).csv")

org_list = data['Name']

threshold = 1300

def find_match(x):

 #fuzz.partial_token_sort_ratio attempts to account for similar strings out 
of order
   match = process.extract(x, org_list, limit=2, 
   scorer=fuzz.partial_token_sort_ratio)[1]
   match = match if match[1]>threshold else np.nan
   return match

df['match found'] = [find_match(row) for row in df['Name']]

print(df)
#Transposing CSV
transposed_data = data.T
transposed_df = df.T
transposed_df.to_csv(r'Desktop\Transposed_Data(1).csv')
transposed_data.to_csv(r'Desktop\Transposed_Data.csv')

Пример того, чего я пытаюсь достичь, - это если имя проекта называется программой HRMC и другоеПроект HRMC Я хотел бы, чтобы он идентифицировал их как сходные, поместил их рядом друг с другом и удалил лишний символ, чтобы сохранить тот же алфавитный формат

Я также пытался использовать термин частота-обратная частота документа (TF-IDF) и был в состоянии иметь некоторые выходные имена, но он не имеет полной информации о ключе. Однако он удаляет «и» и другую избыточную информацию, так что это будет путь вперед?

import pandas as pd
import numpy as np
#Fuzzywuzzy used for string matching
from fuzzywuzzy import fuzz 
from fuzzywuzzy import process
from sklearn.feature_extraction.text import TfidfVectorizer

#Reading Data in and creating DB
data = pd.read_csv("data(2).csv", encoding="ISO-8859-1")
#Alphabetical Order
data = data.sort_values('Name')

#Using term frequency–inverse document frequency (TF-IDF)
#Converts raw document into a matrix of TF-IDF features
vectorizer = TfidfVectorizer()
#Collection of text in column Name being gathered
corpus  = data['Name'].values
#Counts how many times each word existed in data set
vectorizer.fit_transform(corpus)
#Prints the selected column Names
print(vectorizer.get_feature_names())

def ChunkIterator(filename):
#The number of rows to be read into a dataframe at a single time to fit 
into local memory
for chunk in pd.read_csv('data(2).csv'):
    for document in chunk['Name'].values:
        yield document
...