Project Crane (危機種族主義和敘事評估)旨在支持希望使用最先進的文本分析算法研究特定事件如何影響在線仇恨言論和種族主義敘事的研究人員和反種族主義組織。 Crane Toolbox是一個Python軟件包:安裝後,起重機中的工具可作為用戶在Python程序中或直接通過終端使用的功能可用。起重機以基本編程為目標,但沒有機器學習技能。
跳過快速啟動

回到頂部
危機種族主義和敘事評估或簡稱起重機是在彈性挑戰賽(COVID19驅動的黑客馬拉松)中誕生的。在九週內,由學生和專業設計師,程序員和計算機科學研究人員組成的跨學科團隊開發了一個原型網站,用於實時監測與Covid19大流行有關的種族主義修辭。該項目是由波士頓大學Gianluca Stringhini提出的,他在COVID19(SARS-COV-2)大流行期間就早期出現在線恐怖行為。讀者可能會在相應的DevPost頁面和該存儲庫的相應DevPost頁面和彈性 - 挑戰 - 依據分支上找到有關彈性挑戰的方法的更多詳細信息。
在進行文學綜述時,我們注意到,關於在線仇恨言論監控的論文很少有社會學研究方法和最新的自然語言處理工具。這些文獻似乎主要分為方法論論文,旨在開發新的機器學習工具來檢測和表徵種族主義,而傳統的社會學研究方法,無論是定性和定量的,這些方法都無法充分利用可用的數據和分析方法。
我們知道,這部分是由於很難從非常不同的領域收集跨學科團隊,部分原因是自動仇恨言論檢測的年輕和不穩定的本質。
我們在黑客馬拉松期間的經驗使我們相信,通過為社會科學研究人員提供用戶友好的工具來利用當前仇恨言論檢測和分析方法更強大的用戶友好工具,從而有所緩解這些問題。
Crane Toolbox旨在支持研究人員和反種族主義組織研究特定事件如何影響在線仇恨言論和種族主義敘事。最先進的文本分析算法迅速發展,它們的傳播通常僅限於計算機科學研究的專門領域。起重機工具箱將其中的一些方法(即典型的社會科學問題)包裹在不需要機器學習技能的用戶友好工具中。
起重機工具箱是Python軟件包。安裝後,用戶可以在其Python腳本中調用其功能,或者使用其直接通過其終端提供的工具。這些工具是用稱為模塊的幾個子包進行組織的。每個模塊對應於一般分析管道中的一步。
Crane工具箱的第一個版本為用戶提供了工具和文檔,以過濾和格式化他們從Twitter(導入模塊)中提取的數據,準備它以進行分析(預處理模塊),執行其選擇的分析(ES)(分析模塊),並獲得結果的基本圖形表示(可視化模塊)。
回到頂部
本節適合經驗豐富的程序員,他們希望首先跳入深處。如果您不知道我們在那裡在說什麼,請不要逃跑!儘管包裝文檔的長度可能會使它有些艱鉅,但我們會牢記非專家,因此您應該找到使用起重機工具箱所需的所有說明和建議。
pip install cranetoolbox第一步是將您的數據轉換為我們的共同數據交換格式,即三列CSV文件。我們使用crane-import模塊執行此步驟。它採用每行包含一個JSON Tweet對象的源文件,並將它們轉換為輕量級的CSV文件。可用參數在“導入模塊”部分中詳細介紹。
crane-import --source-folder ./my_source --output-folder ./my_output在數據分析之前清理文本數據很重要。我們提供了一個CLI工具來執行此步驟,並提供多個預處理選項。可用參數在“預處理模塊”部分中詳細介紹。
crane-preprocess ./my_output ./my_preproc_output我們目前提供了一個單個統計分析工具,該工具使用提供的一組關鍵字對數據集執行基本頻率分析。所需的輸入格式和可用參數在“分析模塊”部分中詳細介紹。
crane-analysis-quanti ./my_preproc_output keywords.json quanti_results.csv回到頂部
本節分為兩個部分:第一個描述如何在終端中以命令行模式或通過python腳本中的函數調用來安裝起重機工具箱並運行其工具;第二個提供了每個模塊的詳細信息,特別是數據格式和參數選擇。
高級用戶可以找到有關代碼文檔中每個模塊內容的其他信息。
為了成功安裝Crane工具箱,您將需要:
強烈建議使用編程和命令線方面的一些基本知識,但是勇敢和勤奮的人可能會選擇繼續進行。
如果上面的列表為您清楚,請跳過安裝說明。否則,請閱讀以下段落,以便準備好您的環境。
終端是一個接口,您可以在其中鍵入並執行基於文本的命令。您可能在這裡找到一個更詳細的說明,以及這裡終端的樣子的圖片。
終端已經安裝在您的計算機上。如果您使用的是基於UNIX的操作系統( MACOSX或Linux發行版),則恰當地命名為終端,並與其他應用一起生活。如果您使用的是Windows操作系統,則將其命名為命令提示,可以在您的開始菜單中找到。對於Windows 8和10,它位於Windows系統文件夾中。
要在終端中運行命令,只需輸入並按Enter。
Python 3是一種編程語言。
安裝過程取決於您的操作系統。可以在Python官方網站上找到基本說明,但是您可以在互聯網上輕鬆找到更多詳細的指南。
PIP是軟件包管理器:它可以幫助您下載Python軟件包並在必要時更新它們。
可以在其官方網站上找到其安裝的基本說明。它被廣泛使用,因此在互聯網上很容易找到逐步指南和其他資源。
pip3命令。您可以通過在終端中運行pip --version ( python -m pip --version for Windows用戶)來檢查哪個版本的pip 。
我們強烈建議使用pip安裝起重機工具箱。在終端中運行pip install cranetoolbox 。該命令可能需要一些時間,因為pip還將自動安裝起重機工具箱所需的所有Python軟件包。您可以在[Crane Toolbox的PYPI頁面]上檢查依賴項列表(鏈接到PYPI頁面)。
也可以從此存儲庫中可用的源代碼手動安裝起重機工具箱。
命令行模式是使用此軟件包的最簡單方法,它使用戶能夠快速運行軟件包的所有部分並在很短的時間內生成可用的統計信息。
工具箱中有三種不同的CLI命令,它們是crane-import , crane-preprocess和crane-analysis-quanti 。為了順序,他們將導入/轉換為標準的CSV格式,將數據預處理成可用的格式,並最終計算給定關鍵字的每日頻率。
有關每個CLI工具下提供的參數的詳細信息,請檢查下面的詳細文檔。
此包已記住了重複使用。儘管CLI工具易於用作獨立工具,但可以在另一個Python項目中導入和使用起重機工具箱。所有功能均通過標準Python軟件包使用供用戶使用。此外,單個高級功能對應於每個CLI工具,因此用戶可以直接從Python調用所需的管道。
可以從crane-import命令行入口點訪問導入模塊。
該模塊的目的是將原始的Twitter JSON數據轉換為更易於管理和輕巧的管道,以供其餘管道使用。這不是必需的步驟,可以由用戶手動執行,也可以通過其他工具進行操作,因為數據在模塊之間作為文件傳遞。
該模塊可以處理大量的大型(多GB)文件,而不會嚴重依賴交換或內存使用情況。這是通過通過塊讀取文件(用戶可以指定選項中的行數)以及在塊中寫作來完成的。這樣可以確保在任何給定時刻僅保存一定數量的數據。
此外,它刪除了分析管道不需要的額外推文數據,減少文件大小並提高此軟件包中以後步驟的性能。
該模塊將嘗試讀取指定文件夾中的任何文件,無論擴展名,名稱等如何。它支持任何基於文本的文件格式(.json,.csv,.txt)。此外,它可以處理壓縮的tar檔案,並在給定的焦油檔案中處理多個文件或文件夾。tar.gz或類似格式。
無論使用哪種確切的文件類型,都應使用n作為線結束字符,每行中始終使用一個JSON對象推文存儲數據。
該模塊將將所有文件與以下列相連為單個CSV文件:
| ID | 文字 | 創建的_at |
|---|---|---|
| Tweet的獨特ID | 全文推文 | 推文的時間戳 |
CSV文件沒有標題,逗號分隔符和文本的可選雙引號。
根據推文是否超過140個字符,本文本列是動態選擇的,有關擴展推文的更多信息,請參閱擴展推文上的官方文檔
如果輸出文件已經存在,則將附加到現有文件。在不存在的情況下,如果沒有指定默認路徑(“ ./filtered_data.csv”),則將創建一個新的。
該導入軟件包可以用作命令行工具,並支持幾個不同的選項。
--source-folder源文件夾或文件以掃描文件/檔案進行處理。--output-folder以保存輸出。必須存在指定的文件夾。默認為./ 。--output-name ,包括輸出文件的名稱,包括擴展名。默認為output.csv 。--text-name ,案例此字段具有不同的名稱。--date-name為創建的five facter_at字段,案例此字段具有不同的名稱。--id-name為ID字段,案例此字段具有不同的名稱。--tweet-language保存在文件中的推文語言。基於JSON對像中的語言字段。默認為en 。--max-lines-in-memory最大的最大線路數量將在內存中保存。可以將其調整為以優化性能或內存有限的計算機。默認為50000 。--retweets使用此標誌在輸出集中包含轉發。默認為false命令行入口點的完整示例:
crane-import --source-folder tweets/november --output-folder mydataset/data --max-lines-in-memory 2000 --output-name dataset.csv從crane-preprocess命令行入口點可以訪問預處理管道。
所提出的預處理改編自Effrosynidis等。 (2017),使用技術9、0、1、3、5和7和4。
作為第一個位置參數給出的數據集可以是CSV文件的文件夾,也可以是單個CSV文件。每個CSV文件應包含3列(輸入的ID,應該是唯一的,int; Tweet的文本,字符串;時間戳:時間戳字符串),沒有標題,逗號分隔符和文本的可選雙引號。
| ID | 文字 | 創建的_at |
|---|---|---|
| Tweet的獨特ID | 全文推文 | 推文的時間戳 |
按順序和給定的字符串,它將:
u002c ),-url ,則將其刪除,-mention-hashtag ,則分割主題標籤,punct ,否則下強調字符除外,-num ,則將其刪除。主題標籤被分割,即使用詞段包分為單詞。
處理後的數據集保存在給出的文件夾中,作為第二個位置參數。如果不存在,將創建文件夾。對於每個輸入文件,都會生成處理後的文件。文件名是通過將“ _preprocessed”附加到相應輸入文件的名稱中生成的。每個CSV文件包含4列(輸入的ID,應該是唯一的,int; Tweet的原始文本,字符串; Tweet的預處理文本,字符串;時間戳:Timestamp String),無標題,逗號分隔符和文本的可選雙引號。
| ID | onigral_text | clean_text | 創建的_at |
|---|---|---|---|
| Tweet的獨特ID | 全文推文 | 推文的預處理文本 | 推文的時間戳 |
該管道有兩個強制性的位置論點和五個可選論點:
-url或--remove-url使用此標誌從推文中刪除URL,而不是用“ URL”替換它們。-mention或--remove-mentions使用此標誌從推文中刪除用戶提及的“ @userhandle”,而不是用“ atuser”代替它們。-hashtag或--segment-hashtags使用此標誌來分割主題標籤,而不是簡單地刪除前面的“#”字符。-punct或--remove-punctuation使用此標誌來刪除所有標點符號期望連字符,而不是更換重複的符號和新線。-num或--remove-numbers使用此標誌從推文中刪除所有數字,而不是用其文本版本替換它們。命令行入口點的完整示例:
crane-preprocess mydataset/data mydataset/preprocessedData -punct當前,分析模塊僅提供一些簡單的定量分析管道,以計算給定關鍵字的日常頻率。
該分析管道可從crane-analysis-quanti命令行的入口點訪問。
它計算數據集中給定關鍵字的每日頻率。它允許使用關鍵字的變體。例如,“男孩”和“ boyz”的出現可以一起計算。
作為第一個位置參數給出的數據集可以是CSV文件的文件夾,也可以是單個CSV文件。每個CSV文件應包含4列(輸入的ID,應該是唯一的,int; tweet的原始文本,字符串; tweet的預處理文本,字符串;時間戳:時間戳字符串),沒有標題,逗號分隔符和文本的可選雙引號。假定預處理文本是低案例。
| ID | onigral_text | clean_text | 創建的_at |
|---|---|---|---|
| Tweet的獨特ID | 全文推文 | 推文的預處理文本 | 推文的時間戳 |
關鍵字是在JSON字典中定義的,其中鍵是每個關鍵字的主要變體,並且值是變體列表。所有關鍵字都應是較低的字符串。例如:
{
"color" : [
" colour " ,
" color "
],
"chinese" : [
" chinese " ,
" chineze " ,
" chines "
]
}The output is a CSV file with a day date column (format "%Y-%m-%d"), a total_count column with the daily total number of tweets in the dataset, a [keyword]_count column for each keyword (its main variant is used to name the column) with the daily number of tweets containing at least one variant of the keyword and a [keyword]_freq column for each keyword (its main variant is used to將列的命名為每日頻率,其中包含關鍵字的至少一個變體的推文。
例如,對於以上設置的關鍵字:
| 天 | total_count | color_count | 中文_count | color_freq | 中文_freq |
|---|---|---|---|---|---|
| 日期 | 每日推文數量 | 每日帶有“顏色”或變體的推文數量 | 每天的“中文”或變體的推文數量 | 帶有“顏色”或變體的推文的每日頻率 | 帶有“中文”或變體的推文的每日頻率 |
該管道有三個強制性的位置論點和一個可選的論點:
-d或--date-format字符串定義數據集中的日期格式。默認值為%a%a%b%d%h:%m:%s%z%y”。命令行入口點的完整示例:
crane-analysis-quanti mydataset/preprocessedData keywords.json quanti_results.csv -d " %d %b %a %h:%M:%S %z %Y " 尚未實施
回到頂部
我們歡迎所有貢獻!如果您有疑問,功能請求或一些反饋,請使用GitHub的問題功能。
這些問題頁面的工作方式與您的舊論壇頁面相當,具有針對編程和GIT版本的許多其他功能。 GitHub為它們提供了詳細的指南,但這是基本知識:
歡迎您提交有關開放問題的拉請請求。尤其是,標記為“幫助”的問題通常是核心團隊正在努力的問題。這是我們在為代碼庫做出貢獻時要求您遵循的準則。
如果您想進一步參與自己(審查PRS,計劃新功能,研究機器學習方法,進行用戶研究,...),您可以通過通過電子郵件向Bolduc2(AT)Hotmail(DOT)FR發送電子郵件來加入核心團隊,以加入。當然,我們歡迎開發人員,也歡迎設計師,所有學術領域的研究人員,技術作家...
我們選擇私下登上人員,而不是出於兩個原因,而不是在存儲庫中分享我們的所有資源。首先,我們希望使不使用開源項目的用戶更容易找到所需的東西。其次,我們的一些資源包含來自用戶研究的私人信息。
回到頂部
https://crane-toolbox.github.io/#/是在彈性挑戰賽期間建立的原型網站,以試圖量化和表徵COVID19大流行對在線恐怖分子仇恨言論的影響。我們將其作為一個非常基本的數據分析類型的示例,可以使用起重機工具箱進行。
我們目前不打算。由於團隊的組成,我們決定將精力集中在起重機工具箱上,我們相信我們可以有所作為。
lachapeliere | gianluca stringhini ? | Marko Shiva Pavlovic | Claudio Catterina | Svetlanamd ? ? ? ? | 伊恩 | 保羅漢 |
凱利 ? ? | Gabriel Ribeiro | 以撒 | TomášLokša | 朱迪思·範·斯蒂格倫(Judith Van Stegeren) |
表情符號密鑰
該項目遵循全企業規範。歡迎任何形式的貢獻!
該項目第一階段的黑客馬拉松貢獻者列表可以在Crane DevPost頁面上找到。
是的!查看貢獻部分。
Python是用於數據分析任務的非常常見的編程語言。軟件包是基本Python語言的可安裝附加組件。粗略地說,模塊是帶有Python代碼的文件。
就是說,如果您完全不熟悉Python,則可能需要在使用起重機工具箱之前對其進行一些嘗試。
請使用此存儲庫的問題頁面。查看貢獻部分以獲取更多詳細信息。
起重機工具箱根據GNU Affero通用公共許可證v3.0分發。
您可以使用它,但要使用它,只要您尊重許可要求:包括許可證和版權通知,說明您所做的更改,披露您的來源(此回購),並根據相同的許可證分發代碼。請注意,無論您對此代碼的使用,我們都不承擔任何責任,並且我們不提供任何保修。
請鏈接到此倉庫。
Twitter開發人員條款限制了Tweets數據集的共享。您將無法找到具有推文內容的公開可用數據集,而是Tweet ID的數據集。可以使用水合物進行水合。
從那裡,這確實取決於您的研究主題和問題。有些非常敏感,有些則少。如果您的時間不太敏感,請使用常規的搜索引擎嘗試運氣。有些人需要一個天真的數據集,代表了Twitter的完整信息流。在這種情況下,最好的選擇是與研究團隊進行頻繁分析Twitter內容的合作。他們可能會保持流的運行,以收集每日Twitter數據的1%。其他人則需要一個已經過濾的數據集,以針對特定的關鍵字或用戶進行過濾。如果是您的情況,請使用常規搜索引擎嘗試運氣。如果您不需要歷史數據,也可以啟動自己的Twitter流以精確收集所需的數據。
我們正在努力將多種標準輸入格式包含到我們的導入模塊中。如果不支持您的數據格式,請與我們聯繫,我們將盡最大努力將其支持在起重機工具箱中或指導您將其轉換為我們支持的格式之一。
也許我們不知道這一點,也許我們還沒有時間實施它,也許我們選擇不出於給定的原因不包括它。請與我們聯繫以告訴我們有關。 (除非這是使用使用費的專有方法。)