كيفية ترميز الكلمات في قائمة بيثون

1

لدي قاموس يحتوي على كل كلمة كمفتاح وقيمة عدد صحيح مقابلة ، مثل:

 {'me': 41, 'are': 21, 'the': 0}

لدي إطار بيانات مع عمود من قوائم الكلمات التي تم ترميزها بالفعل ، مثل:

['I', 'liked', 'the', 'color', 'of', 'this', 'top']
['Just', 'grabbed', 'this', 'today', 'great', 'find']

كيف يمكنني ترميز كل من هذه الكلمات في قيمها المقابلة من القاموس. فمثلا:

[56, 78, 5, 1197, 556, 991, 40] 

4 الاجابة

5
افضل جواب

ماذا عن العمل

word2key = {'me': 41, 'are': 21, 'the': 0}
words = ['Just', 'grabbed', 'this', 'today', 'great', 'find']
default = 'unknown'
output = [word2key.get(x, default) for x in words]

قد ترغب في استخدامها x.lower() إن أردت 'Just' و 'just' ليتم تعيينها على نفس القيمة.

:مؤلف
1
افضل جواب

باستخدام القاموس والقائمة

يستخدم ما يلي قاموس ( final_dictionary ) لتحديد معرف الكلمات. هذا أمر عظيم إذا كان لديك قاموس معرف مسبقًا.

def encode_tokens(tokens):
    encoded_tokens = tokens[:]
    for i, token in enumerate(tokens):
        if token in final_dictionary:
            encoded_tokens[i] = final_dictionary[token]
    return encoded_tokens

print(encode_tokens(tokens))

إضافة والحفاظ على معرف

إذا كنت تقوم بتعيين معرفات بشكل ديناميكي ، فسأقوم بتنفيذ فصل دراسي للقيام بذلك (انظر أدناه). ومع ذلك ، إذا كان لديك قاموس معرفات قمت بتحديده مسبقًا مسبقًا ، فيمكنك تمرير وسيطة الكلمة الأساسية di :

token_words_1 = ['I', 'liked', 'the', 'color', 'of', 'this', 'top']
token_words_2 = ['I', 'liked', 'to', 'test', 'repeat', 'words']

class AutoId:
    def __init__(self, **kwargs):
        self.di = kwargs.get("di", {})
        self.loc = 0
    def get(self, value):
        if value not in self.di:
            self.di[value] = self.loc
            self.loc += 1
        return self.di[value]
    def get_list(self, li):
        return [*map(self.get, li)]

encoding = AutoId()
print(encoding.get_list(token_words_1))
print(encoding.get_list(token_words_2))
:مؤلف
1
افضل جواب
from itertools import chain
import numpy as np

# d = {'me': 41, 'are': 21, 'the': 0}
l1 = ['I', 'liked', 'the', 'color', 'of', 'this', 'top']
l2 = ['Just', 'grabbed', 'this', 'today', 'great', 'find']

# This is just for data generation for the sake of a complete example.
# Use your already given d here instead.
d = {k: np.random.randint(10) for k in chain(l1, l2)}
print(d)

l1_d = [d.get(k, 0) for k in l1]  # <- this is the actual command you need
print(l1_d)

l2_d = [d.get(k, 0) for k in l2]
print(l2_d)

النتيجة:

{'I': 3, 'liked': 3, 'the': 8, 'color': 7, 'of': 3, 'this': 5,
 'top': 3, 'Just': 6, 'grabbed': 0, 'today': 0, 'great': 7, 'find': 0}
[3, 3, 8, 7, 3, 5, 3]
[6, 0, 5, 0, 7, 0]
:مؤلف
1
افضل جواب

افترض أن الإملاء الخاص بك في متغير مسمى d والقائمة الخاصة بك مسماة l :

d = {'me': 41, 'are': 21, 'the': 0}
l = ['I', 'liked', 'the', 'color', 'of', 'this', 'top']

print(l)
c = 0
while c < len(l):
    try:
        l[c] = d[l[c]]
    except:
        l[c] = None
    c += 1

print(l)
:مؤلف

أسئلة ذات صلة

فوق
قائمة طعام