0

このようなデータを持つデータフィードを分析しています

RAM 4 GB DDR3
RAM 16GB DIMM
memory 4GB DDR3 MHz         // no value for MHz 
memory 4GB DDR3 1333 MHz    // no the order of MHz is not fixed
ram 6GB, 1333 MHz, DDR3     // comma used as delimiter

Processor Intel Core i7-3612QM
Processor Intel Core i7 2630QM
processor i3-380,2.53 GHz          //380 used for model number instead of 380M and model number separated by '-' and clock speed separated by ','
Processor Core i3-380 2.53 GHz 
Processor Intel Ci3 - 2330 (2nd Gen), 2.53 GHz   // multiple symbols used as delimiters(',','-')

Hard drive 500GB 5400RPM
Hard Disk Drive 1.5 TB
Hard Disk 256 GB

ここで、各仕様の意味を分析する必要がram 6GB, 1333 MHz, DDR3あります。6GBが容量、1333 MHzが周波数、DDR3がRAMのタイプであることを理解する必要があります。しかし、ご覧のとおり、これらは非常に不規則です(一部のエントリには一部のフィールドがあり、他のフィールドがない場合があり、空白が区切り文字として使用される場合もあります。場合によっては,s、場合によっては-s)。私の最初の反応は正規表現を使用することでしたが、すぐにそれが愚かであることに気づきました。それから私splitはセパレーター(,上記の場合)でできると思いましたが、セパレーターでさえ固定されていません。また、このアプローチは、このようなエントリには役に立ちませんmemory 4 GB 1333 MHz DDR3。このエントリの区切り文字として空白を使用すると、異なるように見えます4 GB 1333 MHz が、実際4 GBには1333 MHz異なっています。また、プログラムでそれを決定しIntel Core i3、Intel Core i3を暗示する方法はありますか?私はそれを一度図書館に伝えなければならないことを理解しています、そして同じことを意味します。しかし、後でテキストを分析すると、理解できるはずです。上記のエントリのリストは、エントリがどのように可変であるかを示しています。これらのタスクを処理するのに役立つPythonライブラリ(または他の言語)はありますか?Core i3i3-380Ci3Intel Core i3Core i3Ci3

4

2 に答える 2

3

各タイプのエントリに直接対応するクラスのセットを構築できる場合は、おそらくそれが最適な方法です。たとえば、RAMのクラスは次のようになります。

class Memory:
    def __init__(self, s):
        if not 'RAM' in s and not 'memory' in s:
            raise ValueError("Not a string that describes RAM.")

        self.capacity = int(re.match(r'(\d+) ?GB', s)[1])

次に、1つが収まるまで各クラスを試してください。

于 2012-08-04T18:49:03.160 に答える
2

まず、デバイス情報を取得する他の体系的な方法がないことを確認しますか?ほとんどのシステムユーティリティは、情報をエクスポートするための標準化された方法を提供します。

この構造をどうしても解析する必要がある場合は、そのような種類の緩く構造化されたドキュメントを処理するために、regexまたは正規表現を使用する必要があります。

このドキュメントは一般に統一された構造ではありませんが、このドキュメントの各行には独自の標準化された構造があります。

論理:

1)ファイルを一度に1行ずつ解析します。2)最初のトークンを読み取り、その行の残りを解析するためのアプローチを使用します。

例:トークン「RAM」に遭遇した場合、常に数値のサイズ、単位、タイプが続くことがわかります。

ハッピーコーディング!

于 2012-08-04T18:44:39.973 に答える