拆分用户名,按字母顺序排列,并用它们创建所有可能的单词

2024-05-04 21:47:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据帧,它由用户名组成,比如-df

import pandas as pd
data = [['Harry Potter'],['Ron weasley'],['Hermione Granger'],['Rubeus Hagrid'],['Dobby'],['Draco Malfoy']]
df = pd.DataFrame(data, columns = ['names'])
df

    names
0   Harry Potter
1   Ron weasley
2   Hermione Granger
3   Rubeus Hagrid
4   Dobby
5   Draco Malfoy

我想要的-1)拆分单词2)按字母顺序排列3)将所有可能的单词按字母顺序排列(考虑单词的第一个字母)

所以应该是这样的-

     names           alphabets  words
0   Harry Potter    aehoprrrty  Ate, Hat, Heart, Party, Pot, Prey, Toy
1   Ron weasley     aeelnorswy  Lean, New, Rose, Worse, Won

如果可能,请帮助我在更少的行中获得所需的结果

谢谢


1条回答
网友
1楼 · 发布于 2024-05-04 21:47:28

一种可能的解决方案,但确实不容易以良好的性能解析所有可能的英语单词-一种想法是使用sets,但随后可能分配多个字母:

import nltk

english_vocab = {w.lower(): 
                 set(w.lower()) for w in nltk.corpus.words.words() if len(w) > 2}
    
f1 = lambda x: ''.join(sorted(y.lower() for y in x if y != ' '))
df['alphabets'] = df['names'].apply(f1)


f2 = lambda x: sorted([k for k, v in english_vocab.items() if v <= x])
df['new'] = df['alphabets'].apply(set).apply(f2)
print (df)
              names        alphabets  \
0      Harry Potter      aehoprrrtty   
1       Ron weasley       aeelnorswy   
2  Hermione Granger  aeeegghimnnorrr   
3     Rubeus Hagrid     abdeghirrsuu   
4             Dobby            bbdoy   
5      Draco Malfoy      aacdflmoory   

                                                 new  
0  [aer, aerate, aerator, aero, aeropathy, aerope...  
1  [aal, aaron, aeaean, aenean, aeon, aer, aero, ...  
2  [aam, aani, aaron, aeaean, aegean, aegerian, a...  
3  [aaru, aba, ababdeh, ababua, abaiser, abaissed...  
4  [bob, bobby, bobo, bod, bodo, body, boo, boob,...  
5  [aal, aam, acalycal, acamar, acara, acarol, ac...  

相关问题 更多 >