3

アルバムからトラック(曲)のリストを取得しようとしていますが、特定のトラックについて、同様に一致するすべてのトラックを取得したいと思います。私は以下の例に言及しましたが、Pythonでこれを進める方法について何かアイデアはありますか?difflib.get_close_matchesは、文ではなく単一の単語に対してのみ機能するようです。

例:(「Aroundtheworld」という文字列を含むものを検索する

tracks = ['Around The World (La La La La La) (Radio Version)', 'Around The World (La La La La La) (Alternative Radio Version)', 'Around The World (La La La La La) (Acoustic Mix)', 'Around The World (La La La La La) (Rucegsegger#Wittwer Club Mix)', 'World In Motion','My Heart Beats Like A Drum (Dam Dam Dam)','Thinking Of You','Why Oh Why','Mistake No. 2','With You','Love Is Blind','Lonesome Suite','Let Me Come & Let Me Go']

出力:

 Around The World (La La La La La) (Radio Version)
 Around The World (La La La La La) (Alternative Radio Version)
 Around The World (La La La La La) (Acoustic Mix)
 Around The World (La La La La La) (Rüegsegger#Wittwer Club Mix)
4

4 に答える 4

8

difflib.get_close_matches文字列(単一の単語以外)を処理できます。この場合、カットオフを下げ(デフォルトは0.6)、n一致の最大数を上げる必要があります。

In [19]: import difflib

In [20]: tracks = ['Around The World (La La La La La) (Radio Version)', 'Around The World (La La La La La) (Alternative Radio Version)', 'Around The World (La La La La La) (Acoustic Mix)', 'Around The World (La La La La La) (Rucegsegger#Wittwer Club Mix)', 'World In Motion','My Heart Beats Like A Drum (Dam Dam Dam)','Thinking Of You','Why Oh Why','Mistake No. 2','With You','Love Is Blind','Lonesome Suite','Let Me Come & Let Me Go']

In [21]: difflib.get_close_matches('Around the world', tracks, n = 4,cutoff = 0.3)
Out[21]: 
['Around The World (La La La La La) (Acoustic Mix)',
 'Around The World (La La La La La) (Radio Version)',
 'Around The World (La La La La La) (Alternative Radio Version)',
 'Around The World (La La La La La) (Rucegsegger#Wittwer Club Mix)']
于 2013-01-27T11:37:44.647 に答える
2
filter(lambda x: 'Around The World' in x, tracks)

これにより'Around The World'、名前に含まれる曲のリストが表示されます。Python 3を使用しているlist(filter(...))場合は、オブジェクトを返すため、リスト()にキャストしfilterます。

タイプミスがあるかもしれないなら、私はあなたを助けることができません。

于 2013-01-27T11:33:39.720 に答える
1

この目的のためにSequenceMatcherのget_matching_blocksを活用できます

>>> from pprint import PrettyPrinter
>>> from difflib import SequenceMatcher
>>> pp = PrettyPrinter(indent = 4)
>>> pp.pprint(tracks)
[   'World In Motion',
    'With You',
    'Why Oh Why',
    'Thinking Of You',
    'My Heart Beats Like A Drum (Dam Dam Dam)',
    'Mistake No. 2',
    'Love Is Blind',
    'Lonesome Suite',
    'Let Me Come & Let Me Go',
    'Around The World (La La La La La) (Rucegsegger#Wittwer Club Mix)',
    'Around The World (La La La La La) (Radio Version)',
    'Around The World (La La La La La) (Alternative Radio Version)',
    'Around The World (La La La La La) (Acoustic Mix)']
>>> seq = ((e, SequenceMatcher(None, 'Around the world', e).get_matching_blocks()[0]) for e in tracks)
>>> seq = [k for k, _ in sorted(seq, key = lambda e:e[-1].size, reverse = True)]
>>> pp.pprint(seq)
[   'Around The World (La La La La La) (Rucegsegger#Wittwer Club Mix)',
    'Around The World (La La La La La) (Radio Version)',
    'Around The World (La La La La La) (Alternative Radio Version)',
    'Around The World (La La La La La) (Acoustic Mix)',
    'World In Motion',
    'With You',
    'Thinking Of You',
    'Why Oh Why',
    'My Heart Beats Like A Drum (Dam Dam Dam)',
    'Mistake No. 2',
    'Love Is Blind',
    'Lonesome Suite',
    'Let Me Come & Let Me Go']
>>> 
于 2013-01-27T11:40:46.440 に答える
-2

あなたはこのようにすることができます。

temp = "Around The World (La La La La La)"

for string in fh.readlines():
    if temp in string:
       print temp

これは、読み取っているファイルの温度と一致する場合に出力されます。

または、マッチングを行うために正規表現を使用できます。

于 2013-01-27T11:36:52.607 に答える