opened
timepp
username_0
举个例子：这么多诗词，想从中找到同时包含“春”“夏”“秋”“冬”四个字的诗句，肯定会选出一大堆，其中绝大部分都是不怎么知名的。想找到知名度较高的。

有个办法是把百度搜索的结果数量作为知名度放在诗词中，但是这结果数量并不稳定，而且有false positive的情况。大家怎么看？
关于诗词的知名度
issue
created
jackeyGao
username_1
我有过想法通过百度指数或者 google 指数做知名度排名， 但工作量不小， 而且还会触发防爬机制。 后来没有继续做下去。
comment
created
weizhiqing
username_2
第一次逛
comment
created
xinglie
username_3
如果用搜索结果呢？比如作者+作品名，如"王安石　甘露歌"，然后再根据`搜索结果数量`做为排名的一个维度呢？如果这样我可以试试来做一下
comment
created
weizhiqing
username_2
哈哈，晚上不睡觉吗




------------------ 原始邮件 ------------------
comment
created
jackeyGao
username_1
@username_3 期待你的好消息 😀
comment
created
xinglie
username_3
程序写完正在调用搜索引擎获取数据，不敢太频繁，怕被封。估计要等上一点时间。
comment
created
zhangtemplar
username_4
Google has api for doing this: https://stackoverflow.com/a/11569731
comment
created
Haoshenqi0123
username_5
恰好我也在做同样的事情，我是用作者+词牌名+词的第一句爬取的。只爬了百度和谷歌。
comment
created
xinglie
username_3
@username_5 这个我做完了，https://github.com/chinese-poetry/chinese-poetry/tree/master/rank　这个目录下的就是结果
comment
created
timepp
username_0
我看了一下, 你目前的搜索方式没有加词的第一句. 对于同一个作者, 可能写了好多同一词牌的词. 这样的话rank就都相同了.
comment
created
Haoshenqi0123
username_5
我看到这个目录了，我猜可能是你做的。https://github.com/chinese-poetry/chinese-poetry/issues/115#issuecomment-660460899

我也是发现 对于同一个作者可能写了好多同一词牌名的词，这样其实不太合理。还有类似古诗十九首这种。名字都一样，结果应该是不太一样的。我看你做的比较好。能否修改一下搜索关键字，再做一下。如果比较忙的话，能否给我借鉴一下360 bing这些搜索引擎的代码。我写的百度谷歌还好，360这些经常报错
comment
created
xinglie
username_3
@username_5 https://github.com/chinese-poetry/chinese-poetry/blob/master/rank/server.js 这个就是搜索相关的代码。
在ciTask或poetTask中
```js
let task = async () => {
                    if (start < list.length) {
                        let r = list[start];
                        let kd = encodeURIComponent(`${r.author} ${r.rhythmic}`);
```
增加上第一行应该就可以了
或者你看下我的任务是怎么写的，我每次搜索间隔时间都很长，防止被封
comment
created
Haoshenqi0123
username_5
多谢
comment
created
zhangtemplar
username_4
这个rank的可靠性感觉很低啊。我试着筛选唐诗top 100，里面竟然一首李白的诗都没有。

```python
import json
import os
from tqdm.notebook import tqdm
import heapq

root_path = os.path.join(os.getcwd(), "rank")
rank_key = "baidu"
# keep top 1000 only
number_items = 100
top1000 = []
for category in ["poet", "ci"]:
    print(category)
    for name in tqdm(os.listdir(os.path.join(root_path, category))):
        if not name.endswith(".json"):
            continue
        # exclude poet.song
        if name.startswith("poet.song"):
            continue
#         print(name)
        file_name = os.path.join(root_path, category, name)
        with open(file_name, "r") as fi:
            data = json.load(fi)
        for item in data:
            item["category"] = name
        # sorted from most to least popular
        data = sorted(data, key=lambda x: x[rank_key], reverse=True)
        # merge two list as well as from most to least popular
        merged = heapq.merge(top1000, data, key=lambda x: x[rank_key], reverse=True)
        # keep top 1000 only
        top1000 = heapq.nlargest(number_items, merged, lambda x: x[rank_key])
display(top1000)
# finaly save the top items to json

result = []
data_path = os.getcwd()
for item in tqdm(top1000):
    category = "ci"
    title_name = "rhythmic"
    if item["category"].startswith("poet"):
        category = "json"
        title_name = "title"
    file_name = os.path.join(data_path, category, item["category"].replace(".rank", ""))
    if not os.path.exists(file_name):
        print(f"{file_name} doesn't exist")
        break
    with open(file_name, "r") as fi:
        data= json.load(fi)
    # find the match
    for entry in data:
        if entry["author"] == item["author"] and entry[title_name] == item[title_name]:
            # find the match
            entry.update(item)
            result.append(entry)
            break
    else:
        print(f"unable to find match for {item}")
# save the result
with open(os.path.join(data_path, f"top_{number_items}.json"), "w") as fo:
    json.dump(result, fo, indent="  ", ensure_ascii=False)
```
comment