回答編集履歴
2
Update
answer
CHANGED
@@ -61,4 +61,22 @@
|
|
61
61
|
# 最後の内包表記ではマッチする名前がない email に関しては
|
62
62
|
# corresponding_name を空文字列('')に置き換えています
|
63
63
|
[j[0] if j else '' for j in [ ... ]]
|
64
|
+
```
|
65
|
+
|
66
|
+
**追記 Part 2**
|
67
|
+
|
68
|
+
> 以下の組み合わせについては抽出することができないようです。
|
69
|
+
> `email=hidehikaneko-abc@gmail.com`, `names=Kaneko Hidehiro; Itoh Hidetaka`
|
70
|
+
|
71
|
+
> names列の姓と名を入れ替えて、…
|
72
|
+
|
73
|
+
姓と名を入れ替えて、で思い付いた事がありまして、以下の様に書き替えてみました。これで `Kaneko Hidehiro` も抽出できます。
|
74
|
+
|
75
|
+
```python
|
76
|
+
df_email_with_names['corresponding_name'] = [
|
77
|
+
j[0] if j else '' for j in [[
|
78
|
+
i for i in n
|
79
|
+
if any(re.search(r'.*?'.join([*e]), j, re.IGNORECASE)
|
80
|
+
for j in (i, re.sub(r'^(.+?)\s+(.+)', r'\2 \1', i)))
|
81
|
+
] for e, n in zip(emails, names)]]
|
64
82
|
```
|
1
Update
answer
CHANGED
@@ -30,4 +30,35 @@
|
|
30
30
|
1 hisaishi.m@gmail.com Uchida Kiwamu; Hisaishi Makoto Hisaishi Makoto
|
31
31
|
2 yasuko-oyama@gmail.com Oyama Yasuko
|
32
32
|
3 ksaki@gmail.com Inoue Yuta; Yamasaki Toru; Kawaguchi Saki Kawaguchi Saki
|
33
|
+
```
|
34
|
+
**追記**
|
35
|
+
|
36
|
+
> `df_email_with_names['corresponding_name']` のコードについて、噛み砕いてどのような動作をしているのか
|
37
|
+
|
38
|
+
`email` を `ksaki@gmail.com`, `names` を `Inoue Yuta; Yamasaki Toru; Kawaguchi Saki` の場合で説明してみます。
|
39
|
+
|
40
|
+
```python
|
41
|
+
[j[0] if j else '' for j in [
|
42
|
+
[i for i in n if re.search(r'.*?'.join([*e]), i, re.IGNORECASE)]
|
43
|
+
for e, n in zip(emails.values[:,0], names)]]
|
44
|
+
|
45
|
+
# zip の部分の e と n
|
46
|
+
for e, n in zip(emails.values[:,0], names)
|
47
|
+
e => 'ksaki'
|
48
|
+
n => ['Inoue Yuta', 'Yamasaki Toru', 'Kawaguchi Saki']
|
49
|
+
|
50
|
+
# 次の内包表記で names と照合
|
51
|
+
[i for i in n if re.search(r'.*?'.join([*e]), i, re.IGNORECASE)]
|
52
|
+
# email 文字列を一文字づつに分解して '.*?' で join
|
53
|
+
r'.*?'.join([*e]) => r'k.*?s.*?a.*?k.*?i'
|
54
|
+
# names と照合(大文字・小文字の違いは無視)、'Kawaguchi Saki' にマッチ
|
55
|
+
re.search(r'.*?'.join([*e]), i, re.IGNORECASE)
|
56
|
+
=>
|
57
|
+
re.search(r'k.*?s.*?a.*?k.*?i', 'Inoue Yuta', re.IGNORECASE)
|
58
|
+
re.search(r'k.*?s.*?a.*?k.*?i', 'Yamasaki Toru', re.IGNORECASE)
|
59
|
+
re.search(r'k.*?s.*?a.*?k.*?i', 'Kawaguchi Saki', re.IGNORECASE)
|
60
|
+
|
61
|
+
# 最後の内包表記ではマッチする名前がない email に関しては
|
62
|
+
# corresponding_name を空文字列('')に置き換えています
|
63
|
+
[j[0] if j else '' for j in [ ... ]]
|
33
64
|
```
|