【问题标题】:Creating an array of keyword search terms using Python使用 Python 创建关键字搜索词数组
【发布时间】:2023-03-12 23:45:01
【问题描述】:

我正在尝试使用 Python 创建一个字母数组,这些字母构建到单词的全名中,最终将用于我正在构建的 Web 应用程序中的关键字搜索。

本质上,Cloud Firestore 中的读取和写入可能会变得很昂贵,我的理解是,如果您使用异步搜索功能,使用字母数组会显着减少人们需要使用的读取次数。

我想遍历我的原始文本文件,提取两列(uuid 和公司名称),然后为公司名称构建关键字搜索词。我需要 uuid,以便在获得完整数组后更新 Firebase Firestore 记录。

因此,公司“WetPaint”的搜索词数组变为:

W
We
Wet 
WetP
WetPa
WetPai
WetPain
WetPaint

这是我目前所得到的:

keywords = ""
arrName = []

with open ('org_test.csv') as csv_file:
    csv_reader=csv.DictReader(csv_file,delimiter=',')
    line_count=0
    for row in csv_reader:
                uuid=row['uuid']
                name=row['name']
                lowerc = name.lower()
                for c in lowerc:
                    keywords += c
                    arrName = keywords
                    print(uuid, arrName)
csv_file.close()

从我的示例文件中,这实际上给了我(是的,我想要它小写):

e1393508-30ea-8a36-3f96-dd3226033abd w
e1393508-30ea-8a36-3f96-dd3226033abd we
e1393508-30ea-8a36-3f96-dd3226033abd wet
e1393508-30ea-8a36-3f96-dd3226033abd wetp
e1393508-30ea-8a36-3f96-dd3226033abd wetpa
e1393508-30ea-8a36-3f96-dd3226033abd wetpai
e1393508-30ea-8a36-3f96-dd3226033abd wetpain
e1393508-30ea-8a36-3f96-dd3226033abd wetpaint
bf4d7b0e-b34d-2fd8-d292-6049c4f7efc7 wetpaintz
bf4d7b0e-b34d-2fd8-d292-6049c4f7efc7 wetpaintzo
bf4d7b0e-b34d-2fd8-d292-6049c4f7efc7 wetpaintzoh
bf4d7b0e-b34d-2fd8-d292-6049c4f7efc7 wetpaintzoho
5f2b40b8-d1b3-d323-d81a-b7a8e89553d0 wetpaintzohod
5f2b40b8-d1b3-d323-d81a-b7a8e89553d0 wetpaintzohodi
5f2b40b8-d1b3-d323-d81a-b7a8e89553d0 wetpaintzohodig
5f2b40b8-d1b3-d323-d81a-b7a8e89553d0 wetpaintzohodigg

我知道问题是我的第一个 for 循环在到达列表中的下一个公司名称时不是“重新开始”或归零,但我不知道如何解决它。它也不是真正的数组。

这是它“应该”的样子:

e1393508-30ea-8a36-3f96-dd3226033abd w
e1393508-30ea-8a36-3f96-dd3226033abd we
e1393508-30ea-8a36-3f96-dd3226033abd wet
e1393508-30ea-8a36-3f96-dd3226033abd wetp
e1393508-30ea-8a36-3f96-dd3226033abd wetpa
e1393508-30ea-8a36-3f96-dd3226033abd wetpai
e1393508-30ea-8a36-3f96-dd3226033abd wetpain
e1393508-30ea-8a36-3f96-dd3226033abd wetpaint
bf4d7b0e-b34d-2fd8-d292-6049c4f7efc7 z
bf4d7b0e-b34d-2fd8-d292-6049c4f7efc7 zo
bf4d7b0e-b34d-2fd8-d292-6049c4f7efc7 zoh
bf4d7b0e-b34d-2fd8-d292-6049c4f7efc7 zoho
5f2b40b8-d1b3-d323-d81a-b7a8e89553d0 d
5f2b40b8-d1b3-d323-d81a-b7a8e89553d0 di
5f2b40b8-d1b3-d323-d81a-b7a8e89553d0 dig
5f2b40b8-d1b3-d323-d81a-b7a8e89553d0 digg

而且我需要能够将这些值作为一个数组存储在 Firestore 中:

对于名为“digg”的公司。关键词:[“d”、“di”、“dig”、“digg”]

【问题讨论】:

    标签: python firebase search google-cloud-firestore cloud


    【解决方案1】:

    只需在外部for 循环内声明keywords

    with open ('org_test.csv') as csv_file:
        csv_reader = csv.DictReader(csv_file, delimiter=',')
        for row in csv_reader:
            uuid = row['uuid']
            name = row['name'].lower()
            keywords = ''
            for c in name:
                keywords += c
                print(uuid, keywords)
    

    另请注意,不需要csv_file.close(),因为您使用的是with 关键字。

    【讨论】:

    • 非常感谢。看起来我很接近,你是对的。我忘记了我只需要在使用 open() 时使用 close() 而不是 with。我不敢相信我没有将变量声明视为解决方案。最后一个问题-“关键字”是一个变量,但它不是一个数组。如何添加我在 for 循环中累积的值但将其转换为数组?
    【解决方案2】:

    在循环中声明两个变量应该可以解决它。

    with open ('org_test.csv') as csv_file:
        csv_reader = csv.DictReader(csv_file, delimiter=',')
        for row in csv_reader:
            uuid = row['uuid']
            name = row['name'].lower()
            keywords = ''
            arrName = []
            for c in name:
                keywords += c
                arrName.append(keywords)
            print(uuid, arrName)
     
    

    【讨论】:

    • 太棒了!这完美地工作。现在我正在尝试更新 Firebase 中的记录,但出现此错误: e1393508-30ea-8a36-3f96-dd3226033abd ['w', 'we', 'wet', 'wetp', 'wetpa', 'wetpai' , 'wetpain', 'wetpaint'] Traceback(最近一次调用最后):文件“keywords.py”,第 107 行,在 doc_ref = store.collection("org_test").where("uuid", "= =", uuid).update(data) AttributeError: 'Query' 对象没有属性 'update'。我试过更新和设置,但我得到了同样的错误。数据很简单:data = {u'keywords': arrName}
    【解决方案3】:

    感谢您的帮助!

    这是工作的最终版本:

    with open (file) as csv_file:
        csv_reader=csv.DictReader(csv_file,delimiter=',')
        line_count=0
        co = []
    
        for row in csv_reader:
    
                    # Initialize variables
                    uuid=row["uuid"]
                    name=row["name"].lower()
                    primary_role=row["primary_role"]
                    cb_url=row["cb_url"]
                    domain=row["domain"]
                    homepage_url=row["homepage_url"]
                    logo_url=row["logo_url"]
                    facebook_url=row["facebook_url"]
                    twitter_url=row["twitter_url"]
                    linkedin_url=row["linkedin_url"]
                    combined_stock_symbols=row["combined_stock_symbols"]
                    city=row["city"]
                    region=row["region"]
                    country_code=row["country_code"]
                    short_description=row["short_description"]
                    keywords = ""
                    arrName = []
                    clean = []
    
                    # Loop to create searchable keywords
                    for c in name:
                        keywords += c
                        arrName.append(keywords)
    
                    doc_ref = db.collection("orgs").document()
                    doc_ref.set({
                        u'uuid': uuid,
                        u'name': name,
                        u'keywords': ArrayUnion(arrName),
                        u'primary_role':primary_role,
                        u'cb_url': cb_url,
                        u'domain': domain,
                        u'homepage_url': homepage_url,
                        u'logo_url': logo_url,
                        u'facebook_url': facebook_url,
                        u'twitter_url': twitter_url,
                        u'linkedin_url': linkedin_url,
                        u'combined_stock_symbols': combined_stock_symbols,
                        u'city': city,
                        u'region': region,
                        u'country_code': country_code,
                        u'short_description': short_description
                        })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-21
      • 2013-07-16
      • 1970-01-01
      • 2018-04-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多