2017-02-28 22 views
2

を解析するための最良の方法私はこのようなテキスト文字列があるだろう:早期パイソン/正規表現 - テキスト記述

  • 富士通のLifeBook E734 13.3" のi5 2.5GHz帯/ 4GBのRAM/500GB SSHDのような新しい
  • のMac Proを、 2009年4コア2.66GHzのインテルXeonプロセッサ/ 16ギガRAM /速度1Tb HD

と私は思ったんだけどメイク、モデル、プロセッサ、画面サイズ、HDサイズ、RAM、条件

に解析したいです、どのようなもので、最も非凡な方法ですか?これらの文字列ですか?

現在、私は次のことをやっている:一致する場合は、コンピュータの静的リストの上に

  1. 反復は、文字列
  2. スプリット文字列からそれらを引き出し、メーカーとモデル
    • 「」と「/」で囲まれています。
    • 使用is x in y:。
      • '"' と "で検索" サイズを見つけるため
      • を探します。 "プロセッサ速度を見つけるためにGHzの"
      • 'Mbの'、 'GBの表情。 。」、 'Tbの'

はここにいくつかのサンプルコードです:

import re 
data={} 
complist = {'make':['Apple','Toshiba','HP', 'Fujitsu'...], 
      'model':['Air','Surface','Zenbook','Lifebook','Mac Pro',...], 
      'condition':['New','Used','Refurbished'...]} 

string = 'Fujitsu LifeBook E734 13.3" i5 2.5GHz/4Gb RAM/500Gb SSHD Like NEW' 
for comparison in complist : 
    for compare in complist[comparison]: 
     if compare in string: 
      data[comparison]=compare 
      string = string.replace(compare, '') 

stringsplit=re.findall(r"[\w']+", string) 

for i,s in enumerate(stringsplit): 
    if any(key in s for key in ['Mb','Gb','Tb']): 
     ... 
     data['Ram']=... 
    if any(... 

私はこれを強引にすることができますが、 "..."は私が指針を探している場所です。また、おそらく最初の部分がより効率的に実行される可能性があります。

ご協力いただきまして誠にありがとうございます。

答えて

1

通常、あなたはそれがcomplist辞書(代わりの周りに他の方法)に表示されるかどうか確認するために、リストにstringを分割し、それをループすることになるでしょう:

stringList = string.split() 
for s in stringList: 
    #loop through the complist to find matches 

はそう、使用してリストを並べ替え :あなたは、ループ

リストについて

の量を減らすことができるようになります! あなたはセットについて

非常に高速であるバイナリ検索を使用することができますので: あなたは言葉だけがリストにある場合に見つける必要のように見えるので。あなたはの代わりにの代わりにと設定してください。 のメンバーシップテストの速度はO(n)( "Big O表記")であり、リストより高速です