0

「test_tweet1.txt」には2つの文があります

@francesco_con40 2nd worst QB. DEFINITELY Tony Romo. The man who likes to share the ball with everyone. Including the other team.
@mariakaykay aga tayo tomorrow ah. :) Good night, Ces. Love you! >:D<

「Personal.txt」内

The Game (rapper)
The Notorious B.I.G.
The Undertaker
Thor
Tiësto
Timbaland
T.I.
Tom Cruise
Tony Romo
Trajan
Triple H

私のコード:

import re
popular_person = open('C:/Users/Personal.txt')
rpopular_person = popular_person.read()
file1 = open("C:/Users/test_tweet1.txt").readlines()
array = []
count1 = 0
for line in file1:
    array.append(line)
    count1 = count1 + 1
    print "\n",count1, line
    ltext1 = line.split(" ")
    for i,text in enumerate(ltext1):
        if text in rpopular_person:
            print text
    text2 = ' '.join(ltext1)

コードの結果は次のとおりです。

1 @francesco_con40 2nd worst QB. DEFINITELY Tony Romo. The man who likes to share the ball with everyone. Including the other team.
Tony
The
man
to
the
the

2 @mariakaykay aga tayo tomorrow ah. :) Good night, Ces. Love you! >:D<
aga

「test_tweet1.txt」の単語と「Personal.txt」を一致させてみました。

期待される結果:

Tony
Romo

なにか提案を?

4

2 に答える 2

0

rpopular_person部分文字列ではなく単語に一致させるには、分割する必要があります

rpopular_person = open('C:/Users/Personal.txt').read().split()

これは与える:

Tony
The

Romo が表示されない理由は、ライン スプリットに「Romo」があるためです。おそらく、その逆ではなく、行で rpopular_person を探す必要があります。たぶん、このようなもの

popular_person = open('C:/Users/Personal.txt').read().split("\n")
file1 = open("C:/Users/test_tweet1.txt")
array = []
for count1, line in enumerate(file1):
    print "\n", count1, line
    for person in popular_person:
        if person in line:
            print person
于 2013-06-04T15:17:16.350 に答える
0

あなたの問題は、それrpopular_personが単なる文字列であるようです。したがって、 のようなことを尋ねると、文字が順番に表示されるため、'to' in rpopular_personの値が得られます。Personal.txtの他の場所でも同じことが言えると思います。True't', 'o''the'

やりたいことは、ツイートを分割するのと同じように、Personal.txt を個々の単語に分割することです。結果の単語のリストを にすることもできsetます。これにより、検索がはるかに高速になります。このようなもの:

people = set(popular_person.read().split())

split()また、引数なしで を呼び出していることにも注意してください。これは、すべての空白 (改行、タブなど) で分割されます。このようにして、意図したとおりにすべてを個別に取得します。または、実際にこれが必要ない場合(編集した Personal.txt の内容に基づいて常に "The" の結果が得られるため)、次のようにします。

people = set(popular_person.read().split('\n'))

このように改行で分割するため、完全な名前の一致のみを検索します。


「ロモ」はツイートに含まれていないため、取得できません。あなたのツイートの単語は「ロモ」です。ピリオド付き。これはあなたにとって問題が残る可能性が非常に高いので、私がすることはあなたのロジックを再配置することです (速度は問題ではないと仮定します)。ツイート内の各単語を見るのではなく、Personal.txt ファイル内の各名前を見て、それがin完全なツイートかどうかを確認します。これにより、句読点などに対処する必要がなくなります。機能を書き直す方法は次のとおりです。

rpopular_person = set(personal.split())
with open("Personal.txt") as p:
    people = p.read().split('\n') # Get full names rather than partial names
with open("test_tweet1.txt") as tweets:
    for tweet in tweets:
        for person in people:
            if person in tweet:
                print person
于 2013-06-04T15:17:35.897 に答える