Sqlite 导出插入的数量。我当时希望创建一个独特单词的表格,并存储每个单词出现的所有位置的列表,以便通过比较列表而不是再次搜索表格,更快地搜索单词、单词集和精确短语。您可能需要使用从左到右的标记(LMR)显式控制混合方向文本的渲染:set v[join$l”\u20

Sqlite 导出插入的数量。我当时希望创建一个独特单词的表格,并存储每个单词出现的所有位置的列表,以便通过比较列表而不是再次搜索表格,更快地搜索单词、单词集和精确短语。您可能需要使用从左到右的标记(LMR)显式控制混合方向文本的渲染:set v[join$l”\u20,sqlite,tcl,hebrew,Sqlite,Tcl,Hebrew,导出插入的数量。我当时希望创建一个独特单词的表格,并存储每个单词出现的所有位置的列表,以便通过比较列表而不是再次搜索表格,更快地搜索单词、单词集和精确短语。您可能需要使用从左到右的标记(LMR)显式控制混合方向文本的渲染:set v[join$l”\u200e,”]。请注意,这并不能解决您的问题,而是与您的视觉印象和期望保持一致。@Calvin先生,谢谢您的建议。我会试试看,因为在希伯来语和英语混合的情况下工作有点烦人。你在构建字符串以将内容插入数据库?这些字符串来自数据库的什么地方?这一定是任



导出插入的数量。我当时希望创建一个独特单词的表格,并存储每个单词出现的所有位置的列表,以便通过比较列表而不是再次搜索表格,更快地搜索单词、单词集和精确短语。您可能需要使用从左到右的标记(LMR)显式控制混合方向文本的渲染:
set v[join$l”\u200e,”]
。请注意,这并不能解决您的问题,而是与您的视觉印象和期望保持一致。@Calvin先生,谢谢您的建议。我会试试看,因为在希伯来语和英语混合的情况下工作有点烦人。你在构建字符串以将内容插入数据库?这些字符串来自数据库的什么地方?这一定是任何语言中的DB反模式@Donalwellow是正确的。我不知道如何直接从SQLite的每一节中拆分单词。如果在上述foreach中添加了insert,则会写入正确的数据,但速度非常慢,必须执行大约500000个单独的insert。我想我可以通过构建一个包含多个值的字符串来减少插入的数量,从而加快速度。我当时希望创建一个独特单词的表格,并存储每个单词出现的所有位置的列表,以便通过比较列表而不是再次搜索表格,更快地搜索单词、单词集和精确短语。您可能需要使用从左到右的标记(LMR)显式控制混合方向文本的渲染:
set v[join$l”\u200e,”]
。请注意,这并不能解决您的问题,而是与您的视觉印象和期望保持一致。@Calvin先生,谢谢您的建议。我会尝试一下,因为尝试将希伯来语与英语混合使用有点烦人。如果Sqlite附带了一个内置的类似表的函数来将句子拆分为单词,那么您可能可以在一个SQL查询中完成这一切(我有一个扩展,其中包括这样一个beast…)您可以从Tcl代码中添加自定义函数。@DonalFillows它不支持在Tcl中创建新的可加载扩展,而这正是表值函数(它们被实现为虚拟表)所需要的。我会将其作为一对函数来完成,一个用于获取字数,另一个用于获取第n个字。是的,TVF会更好,但曝光率不高。@Shawn谢谢。我来试试这些。我试图避免为每个单词执行插入,因为我想写所有大约500000个单词。也许没什么区别。作为一个新手,我认为最好将它们分成大组插入。如果Sqlite附带了一个内置的类似于表的函数来将句子拆分为单词,那么您可能可以在一个SQL查询中完成所有操作(我有一个扩展,其中包括这样一个beast…)您可以从Tcl代码中添加自定义函数。@DonalFillows它不支持在Tcl中创建新的可加载扩展,而这正是表值函数(它们被实现为虚拟表)所需要的。我会将其作为一对函数来完成,一个用于获取字数,另一个用于获取第n个字。是的,TVF会更好,但曝光率不高。@Shawn谢谢。我来试试这些。我试图避免为每个单词执行插入,因为我想写所有大约500000个单词。也许没什么区别。作为一个新手,我认为最好把他们分成大组。谢谢。当您写到
join
命令不会改变内存中字符的顺序,这是一个在屏幕上呈现文本的问题时,您的意思是
join
内存中的结果以及用于构建SQL语句的结果也应该正确排序吗?如果是这样的话,那么SQL就不会出错,我肯定还有一个我在别处遗漏的错误。谢谢。当您写到
join
命令不会改变内存中字符的顺序,这是一个在屏幕上呈现文本的问题时,您的意思是
join
内存中的结果以及用于构建SQL语句的结果也应该正确排序吗?如果是这样的话,那么SQL就不应该出错,我必须在其他地方丢失另一个错误。
set l {}
set sql { select * from src_original where type_no=0 and book_no < 40 limit 1}
dbws eval $sql origLang {
  set i 0
  foreach { x } $origLang(original) { lappend l "($origLang(book_no),$origLang(chapter_no),$origLang(verse_no),[incr i],$x)" }
}

puts [lindex $l 0]; # (1,1,1,1,בְּרֵאשִׁית)
puts [lindex $l 1]; # (1,1,1,2,בָּרָא)
puts [lindex $l 2]; # (1,1,1,3,אֱלֹהִים)
puts [lindex $l 3]; # (1,1,1,4,אֵת)
puts [lindex $l 4]; # (1,1,1,5,הַשּׁמַיִם)
puts [lindex $l 5]; # (1,1,1,6,וְאֵת)
puts [lindex $l 6]; # (1,1,1,7,הָאָֽרֶץ׃)

set v [join $l ,]; # (1,1,1,1,בְּרֵאשִׁית),(1,1,1,2,בָּרָא),(1,1,1,3,אֱלֹהִים),(1,1,1,4,אֵת),(1,1,1,5,הַשּׁמַיִם),(1,1,1,6,וְאֵת),(1,1,1,7,הָאָֽרֶץ׃)

set r "insert into vowel_pts (book_no, chapter_no, verse_no, index_no, word) values $v"
dbws eval $r
with
arr_vp as (
select book_no, chapter_no, verse_no,
       '["' || replace(original,' ', '","' ) || '"]' as t
from src_original
where book_no=1
  and chapter_no=1
  and verse_no < 3
  and type_no=0
)

select a.book_no, a.chapter_no, a.verse_no,
       (key+1) as index_no,
       j.value as vowel_pts
from arr_vp a,
     json_each( ( select t
                  from arr_vp r
                  where r.book_no=a.book_no
                    and r.chapter_no=a.chapter_no
                    and r.verse_no=a.verse_no ) ) as j
where j.type = 'text';
# Populate an array of dicts
set l {}
set sql {select * from src_original where type_no=0 and book_no < 40 limit 1}
dbws eval $sql origLang {
    set i 0
    foreach x $origLang(original) {
        lappend l [dict create book_no $origLang(book_no) \
                               chapter_no $origLang(chapter_no) \
                               verse_no $origLang(verse_no) \
                               index_no [incr i] \
                               word $x]
    }
}

# And insert them one at a time.
foreach w $l {
    dict with w {
        dbws eval {
            INSERT INTO vowel_pts(book_no, chapter_no, verse_no, index_no, word)
            VALUES ($book_no, $chapter_no, $verse_no, $index_no, $word)
        }
    }
}
dbws eval {
    WITH verse AS (SELECT * FROM src_original WHERE type_no = 0 AND book_no < 40 LIMIT 1),
    words AS
      (SELECT book_no, chapter_no, verse_no,
              substr(original || ' ', 1, instr(original || ' ', ' ') - 1) AS word,
              substr(original || ' ', instr(original || ' ', ' ') + 1) AS original,
              1 AS index_no
       FROM verse
       UNION ALL
       SELECT book_no, chapter_no, verse_no,
              substr(original, 1, instr(original, ' ') - 1),
              substr(original, instr(original, ' ') + 1),
              index_no + 1
       FROM words WHERE length(original) > 0)
    INSERT INTO vowel_pts(book_no, chapter_no, verse_no, index_no, word)
    SELECT book_no, chapter_no, verse_no, index_no, word FROM words
}